最近想要学习一下 swoole,虽然机子上装的是 php7.0,但是考虑到一些有关 swoole 的轮子要依赖更高版本(例如 swooletw),所以就在机子上升级了 php7.2,下面是在网上搜索或者自己折腾出来的一些笔记。
版本升级操作 (直接从 7.0 升级到 7.2):
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get upgrade php
# 拓展升级
sudo apt-get install php7.2-mbstring
sudo apt-get install php7.2-gd
sudo apt-get install php7.2-dom
sudo apt-get install php7.2-mysql
sudo apt-get install php7.2-curl
……
有需要可以安装 swoole: https://wiki.swoole.com/wiki/…
这里建议直接用 pecl install swoole 安装,一步到位,如果手动编译,貌似会出现各种因为版本对应不上的问题。
切换版本:
# 禁用 7.0 版本
sudo a2dismod php7.0
# 启用 7.2 版本
sudo a2enmod php7.2
# 重启 nginx(或 apache)
sudo service nginx restart
如果出现 ERROR: Module php7.0 does not exist!,执行 sudo apt-get install libapache2-mod-php7.0 再执行上面操作
这时候在浏览器查看 phpinfo() 应该就可以看到 7.2 版本了,但是命令行 cli 那里还是 7.0,需要执行下面操作:
# 切换 cli
sudo update-alternatives –set php /usr/bin/php7.2
这样在命令行执行 php - v 也能看到 7.2 版本了
如果有两个版本,其实可以直接用 sudo service php7.0-fpm stop/restart 来进行切换,当然这只能切换 php-fpm,也就是 web 端,命令行 cli 端还是不能切换的
Parse error: syntax error, unexpected ‘?’, expecting variable (T_VARIABLE):
升级版本后,我还折腾了 php7.1,然后第二天回来启动电脑就发现所以 laravel 项目都报这样的错,网上搜索后知道是版本问题,但是看了下 php - v 没问题就是 7.2,这时候打算重启 php 报错,以下的报错就是问题所在了:ERROR: unable to bind listening socket for address ‘127.0.0.1:9001’: Address already in use (98) 大致就是端口被占用,然后 php fastCGI 程序启动失败
解决方法:ps aux|grep php 查看所有 php-fpm 进程,发现有个 php7.1-fpm 进程,拿到进程 id,再 kill 掉就能够重启了。
网上查询的解决方法是 killall php-pfm 这个命令,执行后只有显示 php-pfm:没有发现操作,这种方法没用,最后使用上面这种查询进程,然后根据进程 id 杀死进程的方法