运行多php版本号,多php版本共同运行方案

随着php7.0发布,php的性能有了质的飞跃,据官网给出的结论,php7.0的性能将是php5.6的两倍!但是php7虽然好用,可不是所有项目都支持的,很多微信的插件、接口都不兼容php7,还有很多老的系统还保留了大量的不兼容php7的方法,实际改起来费时费力,这个时候,有没有一种解决方案,能两全其美呢?答案是肯定的,那就是php多版本共存,即老的系统还是用原来的版本,新的项目想尝试php7性能带来的快感,这些版本共同运行即可。

假设之前已经安装有了php5.6,在/usr/local/php目录,则现在只需安装php7即可:

首先,安装依赖:

yum -y install zlib-devel libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel libzip-devel pcre-devel readline-devel

进入到src目录,下载php7最新版本:

cd /usr/local/src

这里使用的是最新版本的php7.2

wget http://cn2.php.net/distributions/php-7.2.0.tar.gz

解压:

tar -xzvf php-7.2.0.tar.gz

进入到版本目录:

cd php-7.2.0/

编译安装:

CFLAGS= CXXFLAGS= ./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc \

--with-fpm-user=www --with-fpm-group=www --enable-fpm --enable-opcache \

--disable-fileinfo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-jpeg-dir \

--with-iconv-dir=/usr/local --with-freetype-dir --with-png-dir --with-zlib --disable-rpath \

--with-libxml-dir=/usr --enable-xml --enable-bcmath --enable-shmop --enable-exif --with-curl \

--enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-inline-optimization \

--enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl \

--with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-ftp \

--with-gettext --enable-zip --enable-soap --disable-ipv6 --disable-debug

常规编译:

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mysqlnd-compression-support --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --with-mcrypt --with-libmbfl --enable-ftp --with-gd --enable-gd-jis-conv --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-opcache --with-pear --enable-maintainer-zts --with-ldap=shared --without-gdbm

注意:配置的文件目录,要新增一个php7目录,不能和原来的php5.6同一个目录,否则会覆盖之前的版本。

在编译php的时候,config可能没有问题,但在make的时候可能出现undefined reference to `libiconv_open’之类的错误,也许是因为机器没有安装libiconv之类的库,怕编译出错,所以不为php加入liconv模块吧

make ZEND_EXTRA_LIBS='-liconv'

执行安装:

make install

安装完成后,配置一些基本信息:

php_install_dir=/usr/local/php7

cp php.ini-production $php_install_dir/etc/php.ini

Mem=`free -m | awk '/Mem:/{print $2}'`

if [ $Mem -gt 1024 -a $Mem -le 1500 ];then

Memory_limit=192

elif [ $Mem -gt 1500 -a $Mem -le 3500 ];then

Memory_limit=256

elif [ $Mem -gt 3500 -a $Mem -le 4500 ];then

Memory_limit=320

elif [ $Mem -gt 4500 ];then

Memory_limit=448

else

Memory_limit=128

fi

sed -i "s@^memory_limit.*@memory_limit = ${Memory_limit}M@" $php_install_dir/etc/php.ini

sed -i 's@^output_buffering =@output_buffering = On\noutput_buffering =@' $php_install_dir/etc/php.ini

sed -i 's@^;cgi.fix_pathinfo.*@cgi.fix_pathinfo=0@' $php_install_dir/etc/php.ini

sed -i 's@^short_open_tag = Off@short_open_tag = On@' $php_install_dir/etc/php.ini

sed -i 's@^expose_php = On@expose_php = Off@' $php_install_dir/etc/php.ini

sed -i 's@^request_order.*@request_order = "CGP"@' $php_install_dir/etc/php.ini

sed -i 's@^;date.timezone.*@date.timezone = Asia/Shanghai@' $php_install_dir/etc/php.ini

sed -i 's@^post_max_size.*@post_max_size = 50M@' $php_install_dir/etc/php.ini

sed -i 's@^upload_max_filesize.*@upload_max_filesize = 50M@' $php_install_dir/etc/php.ini

sed -i 's@^;upload_tmp_dir.*@upload_tmp_dir = /tmp@' $php_install_dir/etc/php.ini

sed -i 's@^max_execution_time.*@max_execution_time = 600@' $php_install_dir/etc/php.ini

sed -i 's@^;realpath_cache_size.*@realpath_cache_size = 2M@' $php_install_dir/etc/php.ini

sed -i 's@^disable_functions.*@disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen@' $php_install_dir/etc/php.ini

sed -i 's@^session.cookie_httponly.*@session.cookie_httponly = 1@' $php_install_dir/etc/php.ini

sed -i 's@^mysqlnd.collect_memory_statistics.*@mysqlnd.collect_memory_statistics = On@' $php_install_dir/etc/php.ini

[ -e /usr/sbin/sendmail ] && sed -i 's@^;sendmail_path.*@sendmail_path = /usr/sbin/sendmail -t -i@' $php_install_dir/etc/php.ini

#如果编译时去掉了 --enable-opcache,则以下包含opcache的都请忽略

sed -i 's@^\[opcache\]@[opcache]\nzend_extension=opcache.so@' $php_install_dir/etc/php.ini

sed -i 's@^;opcache.enable=.*@opcache.enable=1@' $php_install_dir/etc/php.ini

sed -i "s@^;opcache.memory_consumption.*@opcache.memory_consumption=$Memory_limit@" $php_install_dir/etc/php.ini

sed -i 's@^;opcache.interned_strings_buffer.*@opcache.interned_strings_buffer=8@' $php_install_dir/etc/php.ini

sed -i 's@^;opcache.max_accelerated_files.*@opcache.max_accelerated_files=4000@' $php_install_dir/etc/php.ini

sed -i 's@^;opcache.revalidate_freq.*@opcache.revalidate_freq=60@' $php_install_dir/etc/php.ini

sed -i 's@^;opcache.save_comments.*@opcache.save_comments=0@' $php_install_dir/etc/php.ini

sed -i 's@^;opcache.fast_shutdown.*@opcache.fast_shutdown=1@' $php_install_dir/etc/php.ini

sed -i 's@^;opcache.validate_timestamps.*@opcache.validate_timestamps=1@' $php_install_dir/etc/php.ini

sed -i 's@^;opcache.enable_cli.*@opcache.enable_cli=1@' $php_install_dir/etc/php.ini

sed -i 's@^;opcache.use_cwd.*@opcache.use_cwd=1@' $php_install_dir/etc/php.ini

sed -i 's@^opcache.max_accelerated_files.*@opcache.max_accelerated_files=100000@' $php_install_dir/etc/php.ini

sed -i 's@^;opcache.max_wasted_percentage.*@opcache.max_wasted_percentage=5@' $php_install_dir/etc/php.ini

sed -i 's@^;opcache.consistency_checks.*@opcache.consistency_checks=0@' $php_install_dir/etc/php.ini

sed -i 's@^;opcache.optimization_level.*@;opcache.optimization_level=0@' $php_install_dir/etc/php.ini

之后,直接沿用php5.6的配置:

cp -f /usr/local/php/etc/php-fpm.conf /usr/local/php7/etc/

当然,还不能马上用,需要修改php-fpm.conf一些配置:

#修改listen 端口号

vim php-fpm.conf

关键来了,php5.6版本使用的是9000,而php7.2版本使用的端口是9001

listen = 127.0.0.1:9001

重启php5和php7(比较粗暴,可以尝试service php-fpm启动方式,这里不做扩展):

killall php-fpm

分别启动:

/usr/local/php/sbin/php-fpm &

/usr/local/php7/sbin/php-fpm &

查看进程

ps aux|grep php-fpm

8f4a2628dc969ed04416fcc96049adaf.png

可以看到,两个版本的进程都已启动;

加入开机启动:

echo "nohup /usr/sbin/php-fpm -R 2>&1 &"

其他配置加载(可选)

/usr/bin/php-fpm -c /etc/php.ini -y /usr/local/etc/php-fpm.conf

接下来又到了关键时刻,配置nginx信息:

vim /usr/local/nginx/conf/vhost/test.conf

如果该项目使用的是php5.6版本,则fastcgi_pass使用的端口是9000

location ~ \.php$ {

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;

include fastcgi_params;

}

如果该项目使用的是php7.2版本,则fastcgi_pass使用的端口是9001

location ~ \.php$ {

fastcgi_pass 127.0.0.1:9001;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;

include fastcgi_params;

}

至此,完成了双版本同时共存运行方案。

如果使用的不是linux系统,而是window系统,则可以使用软件PHPWAMP,这个软件可以支持运行多版本,具体就不赘述了,百度有资料。

·

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值