macOS 下 homebrew 安装的 PHP 切换版本(多版本共存)
接上文。
上文中提到 composer install 遇到的报错其实有两个,第一个是 Redis 扩展的问题,第二个就是 php 版本问题。
我安装的依赖有个依赖还不支持 php 8.3,这时候其实只要升级这个依赖的版本问题应该就可以解决了。
但我还是想切换回 php8.1,因为我的 fpm 跑的还是 8.1,cli 里跑 8.3 其实并不 make sense。
接上文。
上文中提到 composer install 遇到的报错其实有两个,第一个是 Redis 扩展的问题,第二个就是 php 版本问题。
我安装的依赖有个依赖还不支持 php 8.3,这时候其实只要升级这个依赖的版本问题应该就可以解决了。
但我还是想切换回 php8.1,因为我的 fpm 跑的还是 8.1,cli 里跑 8.3 其实并不 make sense。
今天用 composer require 一个库,报错,提示缺少 redis 扩展。
我的 php 是用 homebrew 安装的,之前用的是 8.1,估计前不久升级了一下,现在看是 8.3 了。
于是尝试使用 brew install php@8.3-redis,发现没有这个包。
想了一下用 pecl 安装。
pecl install redis
一路使用默认选项,竟然很顺利地安装成功了。
我用 PHP 脚本写了一个订阅 redis 列表的命令,但我发现跑了没多久就连接失败退出了。
报错的提示是:read error on connection to 127.0.0.1:6379
。
试了两次发现时间差不多,估计是触发了 PHP 的某个默认配置。
好在现在有了 ChatGPT,不需要去慢慢查文档了。
问了一下 ChatGPT,给出的 4 个可能原因中,第三个非常 match:
如果在读取数据时连接突然中断,可能是由于连接超时、网络中断或 Redis 服务器故障引起的。在 PHP 中,可以使用 ini_set('default_socket_timeout', -1); 来设置无限制的超时时间,以确保连接不会因为超时而关闭。
在脚本之前加上 ini_set('default_socket_timeout', -1);
再跑,果然 work 了。
查了下 php.ini 的配置,默认的时间果然是 60 秒。
自从有了 ChatGPT,Google 变得没那么重要了。。。
如果用 Google,可能我还在翻 StackOverflow 或者 php.net 寻找问题的可能原因。
如果用 Bing,可能我还在关闭 CSDN 页面上的广告。
如果用百度,可能我又要被哪个卖课的骗进去了。
现在体会到 ChatGPT 发布后,Google 为啥那么着急了。。。
只依赖 curl 扩展,复制即可使用。封装了 文本、markdown、图片类型,其他类型也可根据需求快速添加,当然也可以根据需求适当调整参数(比如 @某某 的功能)。
基于 Monolog 构造了一个日志生成器。
需要根据情况区分日志渠道,场景是根据运行环境(fpm 和 cli)自动区分。
查了一下,可以使用 php_sapi_name 方法确定是否是 cli 环境:
public static function logger($alias = null): LoggerInterface
{
if (empty($alias)) {
$alias = php_sapi_name() === 'cli' ? 'cli' : 'fpm';
}
return self::initLogger($alias);
}
效果不错。
Parsedown 是一款用 PHP 编写的轻量级 Markdown 解析和转换库。它由 Emanuil Rusev 开发,代码托管在 GitHub 上。Parsedown 可以将 Markdown 文本转换成 HTML,支持 GitHub Flavored Markdown 的大部分功能,包括:
直接上代码:
发现很多人没有把 php 加进环境变量。(主要是 windows 用户,*nix 不会存在这个问题)
把你的 php.exe 的路径复制下来,比如我的就是 C:\dev\php5.4;
,然后右击 我的电脑
->属性
->高级系统设置
->高级
->环境变量
,把 C:\dev\php5.4;
添加进 path 即可。注意分号的使用,每个 path之间用分号隔开,注意是英文的分号,不是中文的分号。