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。
今天遇到一个问题,在使用 Symfony 6.x 框架的项目里,我没有使用框架自带的 Security 组件,而是自己实现了一个用户认证的土方法。
在我的方法中,当用户请求需要登录的接口时,会抛出一个自定义的异常 ApiNotAuthException,然后我在 ExceptionListener 监听器服务中捕获这个异常并封装我自己的返回值结构,最后将状态码强制改为 200(因为我不喜欢使用 HTTP 状态码来替代业务状态码)。
基于 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之间用分号隔开,注意是英文的分号,不是中文的分号。
今天为了本地编译一个开源软件,用 homebrew 安装了 rustc
,结果后来发现导致 php 命令报错。
dyld[16856]: Library not loaded: /opt/homebrew/opt/libavif/lib/libavif.15.dylib
Referenced from: <87C1A268-34E4-396F-8BBC-D5591064E333> /opt/homebrew/Cellar/gd/2.3.3_5/lib/libgd.3.dylib
Reason: tried: '/opt/homebrew/opt/libavif/lib/libavif.15.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/opt/libavif/lib/libavif.15.dylib' (no such file), '/opt/homebrew/opt/libavif/lib/libavif.15.dylib' (no such file), '/usr/local/lib/libavif.15.dylib' (no such file), '/usr/lib/libavif.15.dylib' (no such file, not in dyld cache), '/opt/homebrew/Cellar/libavif/1.0.1/lib/libavif.15.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/libavif/1.0.1/lib/libavif.15.dylib' (no such file), '/opt/homebrew/Cellar/libavif/1.0.1/lib/libavif.15.dylib' (no such file), '/usr/local/lib/libavif.15.dylib' (no such file), '/usr/lib/libavif.15.dylib' (no such file, not in dyld cache)
Abort trap: 6
虽然现在已经是 PHP8 时代,但国内的很多应用还是仅支持 PHP7,所以不得不给 Ubuntu 22.04 安装 7.4 版本的 PHP。
由于我用的云服务器厂商不再支持 Ubuntu 的镜像,迫不得已选择的最新的 Debian 11,可惜默认的 PHP 版本仍然是 7.4,果然太保守...
直接上代码: