当前位置:

首页 > 编程开发 > linux lnmp php7.0,LNMP 环境下安装多个 PHP 版本(PHP7, PHP5)

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

LNMP 环境下安装多个 PHP 版本(PHP7, PHP5) 很多老牌开源程序还没完全跟上 PHP 7 的步伐,所以一个常见的运维场景就出现了:在已有的 CentOS 7 系统上,既要保留原有的 PHP 5 环境(搭配着 MySQL 5.7 和 Nginx 1.12),又要为性能测试或新项目部署安

本文目录

    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 版本的需求。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Linux
    上一篇: php multi,php setmulti
    相关文章 更多
    linux删除用户与用户组的方法及命令教程
    linux删除用户与用户组的方法及命令教程

    掌握Linux中删除用户和用户组的正确方法,避免残留文件和进程冲突。本文深入解析userdel和groupdel命令的参数用法,提供处理“用户仍在使用”等常见错误的实战方案。

    Linux如何开启端口号?开放端口命令详解
    Linux如何开启端口号?开放端口命令详解

    详细讲解Linux如何开启端口号以及常用的开放端口命令。

    crossover卸载软件下载及重新安装教程
    crossover卸载软件下载及重新安装教程

    遇到CrossOver运行错误或需要更新版本时,如何彻底卸载旧版并干净重装?本教程详解macOS和Linux下的卸载步骤、残留文件清理方法及官方下载渠道,确保软件环境纯净稳定。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。