商城首页欢迎来到中国正版软件门户

您的位置:首页 >linux lnmp php7.0,LNMP 环境下安装多个 PHP 版本(PHP7, PHP5)

linux lnmp php7.0,LNMP 环境下安装多个 PHP 版本(PHP7, PHP5)

  发布于2026-05-03 阅读(0)

扫一扫,手机访问

LNMP 环境下安装多个 PHP 版本(PHP7, PHP5)

很多老牌开源程序还没完全跟上 PHP 7 的步伐,所以一个常见的运维场景就出现了:在已有的 CentOS 7 系统上,既要保留原有的 PHP 5 环境(搭配着 MySQL 5.7 和 Nginx 1.12),又要为性能测试或新项目部署安装一个 PHP 7。这活儿听起来有点绕,但理顺了步骤,其实并不复杂。

安装nginx

首先,咱们把 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 7.2

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 7.2

安装完成只是第一步,接下来的配置才是让 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

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 服务

为了让 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 版本

最后一步,也是最体现“多版本共存”价值的一步:让 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 版本的需求。

本文转载于:https://blog.csdn.net/weixin_34571972/article/details/116887550 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注