ubuntu多版本php切换

最近想要学习一下swoole,虽然机子上装的是php7.0,可是考虑到一些有关swoole的轮子要依赖更高版本(例如swooletw),因此就在机子上升级了php7.2,下面是在网上搜索或者本身折腾出来的一些笔记。php

版本升级操做(直接从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/...html

这里建议直接用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,须要执行下面操做:mysql

# 切换cli
sudo update-alternatives --set php /usr/bin/php7.2

这样在命令行执行php -v也能看到7.2版本了nginx

若是有两个版本,其实能够直接用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程序启动失败laravel

解决方法:
ps aux|grep php查看全部php-fpm进程,发现有个php7.1-fpm进程,拿到进程id,再kill掉就可以重启了。web

网上查询的解决方法是killall php-pfm这个命令,执行后只有显示 php-pfm:没有发现操做,这种方法没用,最后使用上面这种查询进程,而后根据进程id杀死进程的方法
相关文章
相关标签/搜索