分类 PHP 下的文章

接上文。

上文中提到 composer install 遇到的报错其实有两个,第一个是 Redis 扩展的问题,第二个就是 php 版本问题。

我安装的依赖有个依赖还不支持 php 8.3,这时候其实只要升级这个依赖的版本问题应该就可以解决了。

但我还是想切换回 php8.1,因为我的 fpm 跑的还是 8.1,cli 里跑 8.3 其实并不 make sense。

- 阅读剩余部分 -

今天用 composer require 一个库,报错,提示缺少 redis 扩展。

2024-04-16T10:35:05.png

我的 php 是用 homebrew 安装的,之前用的是 8.1,估计前不久升级了一下,现在看是 8.3 了。

于是尝试使用 brew install php@8.3-redis,发现没有这个包。

想了一下用 pecl 安装。

pecl install redis

一路使用默认选项,竟然很顺利地安装成功了。

2024-04-16T10:36:50.png

- 阅读剩余部分 -

我用 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 为啥那么着急了。。。

基于 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);
}

效果不错。

写在前面

发现很多人没有把 php 加进环境变量。(主要是 windows 用户,*nix 不会存在这个问题)

把你的 php.exe 的路径复制下来,比如我的就是 C:\dev\php5.4;,然后右击 我的电脑->属性->高级系统设置->高级->环境变量,把 C:\dev\php5.4; 添加进 path 即可。注意分号的使用,每个 path之间用分号隔开,注意是英文的分号,不是中文的分号。

- 阅读剩余部分 -