如何升级到PHP 7在CentOS 7

介绍

PHP 7于2015年12月3日发布,与以前的语言版本相比,速度有了大幅提升,同时还带来了诸如标量类型提示等新功能。 本指南解释如何使用社区提供的软件包将运行PHP 5.x(任何版本)的Apache或Nginx Web服务器快速升级到PHP 7。

警告:与大多数主要版本发布的语言,最好在生产中切换到PHP 7之前要等待一小会儿。 同时,现在是测试您的应用程序与新版本的兼容性,执行基准测试以及熟悉新语言功能的好时机。

如果您已经安装了phpMyAdmin进行数据库管理,强烈建议您在升级前等待正式的CentOS PHP 7软件包,因为phpMyAdmin软件包尚不支持升级。 如果您正在运行任何其他服务或应用程序与活动用户,最安全的是首先在分段环境中测试此过程。

先决条件

本指南假定您在CentOS 7上运行PHP 5.x中,无论是使用mod_php在与Nginx的结合与Apache或PHP-FPM一起。 它还假定你有一个配置非root用户sudo权限管理任务。

PHP 5安装过程在这些指南中进行了说明:

订阅IUS社区项目库

由于PHP 7.x尚未打包到主要发行版的官方存储库中,因此我们必须依赖第三方来源。 几个存储库提供PHP 7 RPM文件。 我们将使用曼月乐库

IUS提供了一个安装脚本,用于订阅其存储库并导入关联的GPG密钥。 确保你在你的home目录里,并使用检索脚本curl

cd ~
curl 'https://setup.ius.io/' -o setup-ius.sh

运行脚本:

sudo bash setup-ius.sh

升级mod_php与Apache

本节介绍使用Apache作为Web服务器和系统升级过程mod_php执行PHP代码。 如果相反,您正在运行Nginx和PHP-FPM,请跳到下一节。

首先删除现有的PHP包。 y,然后按Enter继续出现提示时。

sudo yum remove php-cli mod_php php-common

从IUS安装新的PHP 7软件包。 再次,按Y提示时输入

sudo yum install mod_php70u php70u-cli php70u-mysqlnd

最后,重新启动Apache加载新版本mod_php

sudo apachectl restart

您可以检查在Apache的状态,这是由管理httpd systemd单元,使用systemctl

systemctl status httpd

使用Nginx升级PHP-FPM

本节介绍使用Nginx作为Web服务器和PHP-FPM执行PHP代码的系统的升级过程。 如果您已经升级了基于Apache的系统,请跳到“PHP测试”部分。

首先删除现有的PHP包。 y,然后按Enter继续出现提示时。

sudo yum remove php-fpm php-cli php-common

从IUS安装新的PHP 7软件包。 再次,按Y提示时输入

sudo yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd

安装完成后,您需要对PHP-FPM和Nginx进行一些配置更改。 至于配置方面,PHP-FPM侦听的本地TCP套接字连接,而Nginx的期望一个Unix域套接字 ,它映射到文件系统中的路径。

PHP-FPM可以处理子进程的多个 至于配置方面,它提供了一个名为WWW一个池,这是在定义/etc/php-fpm.d/www.conf 打开这个文件, nano (或者您喜欢的文本编辑器):

sudo nano /etc/php-fpm.d/www.conf

查找包含块listen = 127.0.0.1:9000 ,它告诉PHP-FPM在端口9000注释用分号此行的环回地址听,并取消listen = /run/php-fpm/www.sock一个下面几行。

/etc/php-fpm.d/www.conf
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;listen = 127.0.0.1:9000
; WARNING: If you switch to a unix socket, you have to grant your webserver user
;          access to that socket by setting listen.acl_users to the webserver user.
listen = /run/php-fpm/www.sock

接下来,查找包含块listen.acl_users值,并取消listen.acl_users = nginx

/etc/php-fpm.d/www.conf
; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users = apache,nginx
;listen.acl_users = apache
listen.acl_users = nginx
;listen.acl_groups =

退出并保存文件。 nano ,你可以通过按Ctrl-X退出,y确认,并回车确认文件名改写做到这一点。

接下来,确保Nginx使用正确的套接字路径来处理PHP文件。 打开开始/etc/nginx/conf.d/default.conf

sudo nano /etc/nginx/conf.d/php-fpm.conf

php-fpm.conf定义的上游 ,可以通过其他的Nginx配置指令引用。 里面的上游块,用#注释掉server 127.0.0.1:9000;并取消server unix:/run/php-fpm/www.sock;

/etc/nginx/conf.d/php-fpm.conf
# PHP-FPM FastCGI server
# network or unix domain socket configuration

upstream php-fpm {
        #server 127.0.0.1:9000;
        server unix:/run/php-fpm/www.sock;
}

退出并保存文件,然后打开/etc/nginx/conf.d/default.conf

sudo nano /etc/nginx/conf.d/default.conf

寻找开头块location ~ \.php$ { 在这个区块,寻找fastcgi_pass指令。 注释掉或删除这条线,而代之以fastcgi_pass php-fpm ,这将引用定义的上游php-fpm.conf

/etc/nginx/conf.d/default.conf
  location ~ \.php$ {
      try_files $uri =404;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      # fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
      fastcgi_pass php-fpm;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
  }

退出并保存文件,然后重新启动PHP-FPM和Nginx,以便新的配置指令生效:

sudo systemctl restart php-fpm
sudo systemctl restart nginx

您可以检查使用每个服务的状态systemctl

systemctl status php-fpm
systemctl status nginx

测试PHP

在配置了Web服务器并安装了新软件包后,我们应该能够验证PHP是否已启动并正在运行。 首先在命令行检查已安装的PHP版本:

php -v
输出端
PHP 7.0.1 (cli) (built: Dec 18 2015 16:35:26) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

您还可以在Web服务器的文档根目录中创建测试文件。 虽然其位置取决于您的服务器配置,但文档根目录通常设置为以下目录之一:

  • /var/www/html
  • /var/www/
  • /usr/share/nginx/html

利用nano ,打开一个名为新文件info.php文档根。 默认情况下,在Apache上,这将是:

sudo nano /var/www/html/info.php

在Nginx上,你可以改用:

sudo nano /usr/share/nginx/html/info.php

粘贴以下代码:

info.php
<?php
phpinfo();

退出编辑器,节省了info.php 现在,在浏览器中加载以下地址:

http://server_domain_name_or_IP/info.php

您应该看到PHP 7信息页面,其中列出了正在运行的版本和配置。 一旦你仔细检查这一点,它是最安全的删除info.php

sudo rm /var/www/html/info.php

您现在有一个工作的PHP 7安装。 从这里,你可能想看看埃里卡海蒂前的准备工作PHP 7博客文章,并期待在正式迁移指南

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏