起因 yii2对最低要求php5.4,但是目前很多空间或者主机,php的版本还停留在5.3及以下。这个时候就面临两个选择:
升级php版本 再安装一个高版本php 如果已经有站点在这个服务器上运行的话,贸然升级php版本,很可能让那些使用了过时的函数,不规范用法的php程序报一堆警告或者错误,那就无可挽回啦。安全起见,再安装一个高版本php比较保守些。那么如果让nginx或者apchce使用不同版本的php呢?那就是php-fpm.
php-fpm fastcgi process manager, 即fastcgi进程管理器。使用php-fpm模式的配置php站点,一个请求的流程是这样的(以nginx+php-fpm为例):
php-fpm启动监听,通常默认是9000,所以很多nginx配置会有一条 fastcgi-pass 127.0.0.1:9000 浏览器发送请到nginx应用服务器 nginx把php请求,转发给php的fastcgi进程, fastcgi进程处理完毕php脚本后,返回给应用服务器,服务器再返回给浏览器。 因此,让不同的站点使用不同的php版本,就可以通过将请求转发给不同的php-fpm进程。
编译php 下载相应版本的php代码,编译安装到不同的路径下,把需要的扩展尽量都加进去:
./configure --prefix=/usr/local/php-5.5 --with-config-file-path=/usr/local/php-5.5/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-bz2 --with-curl=/usr/bin --enable-ftp --enable-sockets --disable-ipv6 --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-freetype-dir=/usr/local --enable-gd-native-ttf --with-iconv-dir=/usr/local --enable-calendar --with-gettext --with-libxml-dir=/usr/local --with-zlib --with-pdo-mysql=mysqlnd --enable-dom --enable-xml --enable-fpm --with-libdir=lib64 --with-mcrypt=/usr/bin --enable-zip --enable-soap --enable-mbstring --with-gd --with-openssl --enable-pcntl --with-xmlrpc --enable-opcache
由于yii2使用到了mcrypt,所以加了?with-mcrypt,但是如果没有安装过,configure的时候会报找不到 mcrypt.h之类的错误,说明系统确实这个库,需要先安装,使用yum install libmcrypt mcrypt mhash. 再次configure就可以不报错了。
配置php-fpm 安装完毕后,打开 php-fpm.conf, 修改监听的端口,或者修改sock文件名称,防止和旧版本的php-fpm进程冲突。然后启动这个php-fpm进程。
修改站点配置 主要就是修改fastcgi_pass, 指向相应的监听端口或者sock文件。