发布于2026-07-21 阅读(0)
扫一扫,手机访问
PHP版本升级这事,看着简单,实际操作起来却常常踩坑。尤其是从PHP 5.6迁移到PHP 7.0,过程中遇到的配置冲突、模块加载失败、端口被占用等问题,一个接一个,着实让人头疼。下面把这个过程完整梳理一遍,希望能帮到正在折腾的你。
直接执行安装命令:
$ brew install php70安装完成后,需要先把旧版本的PHP 5.6解除链接,再链接到新版本。当然,具体路径要根据你的实际环境来调整:
$ brew unlink php56
$ brew link php70到这里,大功告成。验证一下版本:
$ php -v
PHP 7.0.0 (cli) (built: Dec 2 2015 13:06:23) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies版本确认没问题,但事情还没完。
当你尝试启动php-fpm时,可能会遇到类似这样的错误:
$ /usr/local/opt/php56/sbin/php-fpm
[26-Mar-2016 12:15:40] NOTICE: PHP message: PHP Warning: PHP Startup: mcrypt: Unable to initialize module
Module compiled with build ID=API20131226,NTS
PHP compiled with build ID=API20131226,NTS,debug
These options need to match错误信息很明确:mcrypt模块编译时使用的build ID和当前PHP环境不一致,导致模块无法加载。解决方法是重新编译这个模块,并且指定从源码构建:
$ brew reinstall php56-mcrypt --build-from-source重新编译完成后,再次启动php-fpm,又会出现新的问题。
执行启动命令后,报错信息变成了:
$ sudo /usr/local/opt/php56/sbin/php-fpm
[26-Mar-2016 12:40:10] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48)
[26-Mar-2016 12:40:10] ERROR: FPM initialization failed这通常是旧版php-fpm进程没有关闭,仍然占着9000端口。先查看一下是谁在占用:
$ sudo lsof -i:9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 707 root 7u IPv4 0x9177969b065b477d 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 708 _www 8u IPv4 0x9177969b065b477d 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 709 _www 9u IPv4 0x9177969b065b477d 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 710 _www 10u IPv4 0x9177969b065b477d 0t0 TCP localhost:cslistener (LISTEN)发现了,四个php-fpm进程占着端口,进程ID分别是707、708、709、710。逐一杀掉:
$ sudo kill -9 707
$ sudo kill -9 708
$ sudo kill -9 709
$ sudo kill -9 710清理干净后,再次启动php-fpm:
$ sudo /usr/local/opt/php56/sbin/php-fpm
[26-Mar-2016 12:55:29] NOTICE: fpm is running, pid 32706
[26-Mar-2016 12:55:29] NOTICE: ready to handle connections最后确认一下php-fpm是否真的在监听9000端口:
$ sudo lsof -Pni4 | grep LISTEN | grep php
php-fpm 32898 root 8u IPv4 0x9177969b05787085 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 32899 _www 9u IPv4 0x9177969b05787085 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 32900 _www 10u IPv4 0x9177969b05787085 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm 32901 _www 11u IPv4 0x9177969b05787085 0t0 TCP 127.0.0.1:9000 (LISTEN)端口监听正常,问题解决。
另一个常见问题是用php-fpm命令直接启动时,提示找不到配置文件:
$ php-fpm -D
[25-Mar-2016 20:23:28] ERROR: failed to open configuration file '/private/etc/php-fpm.conf': No such file or directory (2)
[25-Mar-2016 20:23:28] ERROR: failed to load configuration file '/private/etc/php-fpm.conf'
[25-Mar-2016 20:23:28] ERROR: FPM initialization failed解决方案是手动指定配置文件的路径,比如:
$ php-fpm --fpm-config /usr/local/etc/php/5.6/php-fpm.conf不过,指定了配置文件后,又可能遇到日志目录不存在的问题:
ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2)
ERROR: failed to post process the configuration
ERROR: FPM initialization failed解决方法很简单,编辑配置文件,添加或修改日志路径:
vim /usr/local/etc/php/5.6/php-fpm.conf在文件中添加一行:
error_log = /usr/local/var/log/php-fpm.log保存后再次启动,一切顺利:
$ php-fpm --fpm-config /usr/local/etc/php/5.6/php-fpm.conf
[25-Mar-2016 20:29:54] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[25-Mar-2016 20:29:54] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[25-Mar-2016 20:29:54] NOTICE: fpm is running, pid 1026
[25-Mar-2016 20:29:54] NOTICE: ready to handle connections至此,PHP版本升级和php-fpm的配置问题全部解决。整个过程虽然有些波折,但只要按照步骤排查,最终都能顺利跑起来。
上一篇:PHP架构-PHP内核
下一篇:PHP——PHP初识
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8