您的位置:首页 >linux lnmp php7.0,LNMP 环境下安装多个 PHP 版本(PHP7, PHP5)
发布于2026-05-03 阅读(0)
扫一扫,手机访问
很多老牌开源程序还没完全跟上 PHP 7 的步伐,所以一个常见的运维场景就出现了:在已有的 CentOS 7 系统上,既要保留原有的 PHP 5 环境(搭配着 MySQL 5.7 和 Nginx 1.12),又要为性能测试或新项目部署安装一个 PHP 7。这活儿听起来有点绕,但理顺了步骤,其实并不复杂。
首先,咱们把 Nginx 的基础环境搭起来。通过源码编译安装,能获得更灵活的模块定制。执行以下命令:
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar xf nginx-1.12.2.tar.gz
cd nginx-1.12.2
useradd -M -s /sbin/nologin nginx
./configure ./configure –prefix=/usr/local/nginx –with-http_ssl_module –with-http_stub_status_module –with-pcre –user=nginx –group=nginx
make && make install
安装完成后,进入目录并启动服务:
cd /usr/local/nginx/
systemctl enable nginx
./nginx
看到服务正常启动,这一步就算搞定了。
PHP 5 和 PHP 7 的编译安装流程其实大同小异,核心区别在于配置参数和依赖库的版本。先打好基础,检查并安装必要的依赖库,尤其是那些带“-devel”后缀的开发包,编译过程离不开它们。
检查是否安装了libxml2-devel,没有的话执行yum install libxml2-devel
安装必要依赖,编译都需要开发版的库,即带-devel的库。
# yum install libjpeg.x86_64 libpng.x86_64 freetype.x86_64 libjpeg-devel.x86_64 libpng-devel.x86_64 freetype-devel.x86_64 -y
#yum install libjpeg-devel curl curl-devel openldap-devel openldap -y
这里以 php-7.2.0 版本为例。先下载源码包:
# wget -c http://cn2.php.net/distributions/php-7.2.0.tar.gz
解压:
# tar -xf php-7.2.0.tar.gz
在64位系统上,可能会遇到一个关于ldap库的常见错误。提前处理一下,把库文件复制到32位库目录:
防止64位系统报错configure: error: Cannot find ldap libraries in /usr/lib
复制ldap库文件到32位文件夹里#cp -frp /usr/lib64/libldap* /usr/lib/
接下来是关键步骤:配置编译参数。这里将安装路径指定为 /usr/local/php7,以便与旧版本清晰隔离:
# cd php-7.2.0/
#./configure –prefix=/usr/local/php7 –enable-fpm –with-mysqli –with-zlib –with-gettext –with-bcmath –with-ldap –with-curl –with-gd –with-jpeg-dir –with-png-dir –with-jpeg-dir –with-png-dir –with-freetype-dir –with-openssl –enable-mbstring –enable-xml –enable-session –enable-ftp –enable-pdo –with-pdo-mysql –enable-opcache –enable-xml –enable-sockets –with-libxml-dir –with-xmlrpc –enable-soap –enable-zip –enable-pcntl
有个细节值得注意:从 PHP 7 开始,官方已经移除了旧的 mysql 扩展支持,所以配置参数里自然就没有 –with-mysql 了。当然,如果需要其他扩展,可以通过 ./configure –help 查看所有可用选项。
配置完成后,开始编译安装:
# make -j4 && make install
安装完成只是第一步,接下来的配置才是让 PHP 跑起来的关键。首先复制并编辑主配置文件:
# cp php.ini-development /usr/local/php7/lib/php.ini
# vim /usr/local/php7/lib/php.ini
需要修改两个关键项。一是找到 mysqli.default_socket,将其指向 MySQL 的 socket 文件:
mysqli.default_socket = /var/lib/mysql/mysql.sock
二是设置正确的时区,找到 date.timezone,去掉前面的分号注释并修改:
date.timezone = PRC
现在,可以验证一下 PHP 7 是否安装成功了:
# /usr/local/php7/bin/php -v
PHP 7.2.0 (cli) (built: Jan 5 2018 10:58:43) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
编译产生的中间文件体积不小,可以选择清理(使用 make clean)或直接删除源码目录。毕竟我们已经通过 –prefix 参数将程序安装到了独立目录,源码的使命已经完成。
PHP-FPM 是 Nginx 与 PHP 通信的桥梁。配置它,主要是处理好服务文件和端口监听问题。
先复制默认的配置文件:
# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
#vim /usr/local/php7/etc/php-fpm.conf在这里配置error-log路径。
接着,配置进程池文件:
#cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
# vim /usr/local/php7/etc/php-fpm.d/www.conf
找到 user 和 group 设置,通常保持默认的 nobody 即可,这是出于安全考虑:
user = nobody
group = nobody 保持默认确保安全 php7这个应该在www-conf里才有
最关键的一步是修改监听端口。因为系统原有的 PHP 5 很可能已经占用了 9000 端口,所以这里需要为 PHP 7 换一个端口,比如 9001:
查找 listen 将
listen = 127.0.0.1:9000
改成
listen = 127.0.0.1:9001
如果不确定端口占用情况,可以用命令 lsof -i:9000 来检查。
为了让 PHP-FPM 能像系统服务一样被管理,需要配置 systemd 服务文件。为了区分,我们将 PHP 7 的服务命名为 php7-fpm.service。
[root@xxx php-7.2.0]## cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/php7-fpm.service
[root@xxx php-7.2.0]# vim /usr/lib/systemd/system/php7-fpm.service
在服务文件中,需要将变量替换为实际的安装路径:
将:
PIDFile=${prefix}/var/run/php-fpm.pid
ExecStart=${exec_prefix}/sbin/php-fpm –nodaemonize –fpm-config ${prefix}/etc/php-fpm.conf
改成
PIDFile=/usr/local/php7/var/run/php-fpm.pid
ExecStart=/usr/local/php7/sbin/php-fpm –nodaemonize –fpm-config /usr/local/php7/etc/php-fpm.conf
本质上,就是用我们之前指定的安装路径 /usr/local/php7 去替换掉那些通用的路径变量。有些系统可能已经自动完成了这一步,但手动确认一下总没错。
然后,重新加载 systemd 配置,并设置开机启动:
# systemctl daemon-reload
可以设置开机启动:
# systemctl enable php7-fpm
立即启动 php7-fpm
# systemctl start php7-fpm
查看状态,确认服务运行正常:
#systemctl status php7-fpm -l
● php7-fpm.service – The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php7-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2018-01-05 13:35:37 CST; 3s ago
Main PID: 1978 (php-fpm)
Memory: 8.9M
CGroup: /system.slice/php7-fpm.service
├─1978 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
├─1986 php-fpm: pool www
└─1987 php-fpm: pool www
如果状态显示为“fail”,别慌。这通常是配置文件路径问题导致的,尤其是 error-log 的路径没有正确配置。在多版本共存的环境里,建议将不同 PHP 版本的错误日志分开存放。比如,可以修改 php7-fpm.conf,明确设置 error_log = /var/log/php7-fpm.log。保存后重启服务,一般就能解决问题。
最后一步,也是最体现“多版本共存”价值的一步:让 Nginx 不同的站点,按需调用不同版本的 PHP。原理很简单,就是通过 fastcgi_pass 指令指向不同的监听端口。
index.php使用
phpinfo();查看版本
首先,为测试站点创建一个 Nginx 配置文件:
# cd /etc/nginx/conf.d/
# vim test.conf
文件名自定义即可
输入,并且保存到/var/www/html/test下:
server { listen 80; server_name localhost; root /var/www/html/test; location / { index index.php index.html index.htm; } 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; } }
别忘了设置网站目录的权限,让 Nginx 用户能够访问:
#chown nginx -R /var/www/html/test
控制站点使用哪个版本的 PHP 关键是在 fastcgi_pass 的端口:
fastcgi_pass 127.0.0.1:9001;
这里的 9001 端口对应我们刚才配置的 PHP 7。如果某个站点需要切回 PHP 5,只需将这里的端口号改为 9000 即可。
配置完成后,重载 Nginx 使配置生效:
# systemctl reload nginx
至此,一个支持 PHP 5 和 PHP 7 双版本的 LNMP 环境就搭建并配置完成了。通过灵活的端口配置,可以轻松管理不同应用对 PHP 版本的需求。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9