商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > mac 删除php56 安装php72,mac php56升级php70

mac 删除php56 安装php72,mac php56升级php70

  发布于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时遇到的模块错误

当你尝试启动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,又会出现新的问题。

端口被占用:9000端口冲突

执行启动命令后,报错信息变成了:

$ 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的配置问题全部解决。整个过程虽然有些波折,但只要按照步骤排查,最终都能顺利跑起来。

本文转载于:https://blog.csdn.net/weixin_36215364/article/details/115763246 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

上一篇:PHP架构-PHP内核

下一篇:PHP——PHP初识

热门关注