如何在 CentOS 7 上升级到 PHP 7

介绍

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

<$>[警告] 警告: 与大多数主要版本的语言版本一样,在生产中切换到PHP 7之前最好稍等一会儿。

如果您已安装 phpMyAdmin 用于数据库管理,建议您在升级前等待官方 CentOS PHP 7 包,因为 phpMyAdmin 包尚不支持升级。

前提条件

本指南假定您在 CentOS 7 上运行 PHP 5.x,使用与 Apache 结合的 mod_php 或与 Nginx 结合的 PHP-FPM。

PHP 5 安装过程在以下指南中得到记录:

订阅IUS社区项目存储库

由于 PHP 7.x 尚未被包装到主要发行版的官方存储库中,我们将不得不依赖第三方的来源。

IUS提供了一个安装脚本,用于订阅其存储库并导入相关的 GPG 密钥. 确保您在您的主目录中,并使用curl获取脚本:

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

运行剧本:

1sudo bash setup-ius.sh

使用 Apache 升级mod_php

本节描述了系统使用Apache作为Web服务器和mod_php来执行PHP代码的升级过程。

首先,删除现有 PHP 包,按 y 并按 Enter 以便在提示时继续。

1sudo yum remove php-cli mod_php php-common

安装新的 PHP 7 包从 IUS. 再次按 yEnter 当提示时。

1sudo yum install mod_php70u php70u-cli php70u-mysqlnd

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

1sudo apachectl restart

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

1systemctl status httpd

使用 Nginx 升级 PHP-FPM

本节描述了使用 Nginx 作为 Web 服务器和 PHP-FPM 来执行 PHP 代码的系统升级过程。

首先,删除现有 PHP 包,按 y 并按 Enter 以便在提示时继续。

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

安装新的 PHP 7 包从 IUS. 再次按 yEnter 当提示时。

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

一旦安装完成,您将需要对 PHP-FPM 和 Nginx 进行一些配置更改. 配置后,PHP-FPM 会听取本地 TCP 接口上的连接,而 Nginx 则会预期 Unix 域接口,该接口会向文件系统的路径绘制。

PHP-FPM 可以处理多个 pools的儿童流程. 根据配置,它提供了一个名为 www的单一池,该池被定义为 /etc/php-fpm.d/www.conf

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

尋找包含「Listen = 127.0.0.1:9000」的區塊,它告訴PHP-FPM在端口 9000上聆聽回路地址. 用半字符號評論這一行,並在下面的幾行中評論「Listen = /run/php-fpm/www.sock」。

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

接下來,尋找包含「listen.acl_users」值的區塊,然後解釋「listen.acl_users = nginx」:

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

nano中,您可以通过按 Ctrl-X来退出, y来确认,和 Enter来确认文件名来重写来完成此操作。

接下来,请确保 Nginx 使用正确的插槽路径来处理 PHP 文件,然后打开 /etc/nginx/conf.d/default.conf:

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

php-fpm.conf 定义一个 upstream,它可以被其他 Nginx 配置指令所引用。在上游区块中,使用一个 #' 来评论 server 127.0.0.1:9000;,以及 uncomment server unix:/run/php-fpm/www.sock;`:

1[label /etc/nginx/conf.d/php-fpm.conf]
2# PHP-FPM FastCGI server
3# network or unix domain socket configuration
4
5upstream php-fpm {
6        #server 127.0.0.1:9000;
7        server unix:/run/php-fpm/www.sock;
8}

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

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

在这个块中,寻找fastcgi_pass指令. 评论或删除这个行,并用fastcgi_pass php-fpm取代,这将引用在php-fpm.conf中定义的上游:

 1[label /etc/nginx/conf.d/default.conf]
 2  location ~ \.php$ {
 3      try_files $uri =404;
 4      fastcgi_split_path_info ^(.+\.php)(/.+)$;
 5      # fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
 6      fastcgi_pass php-fpm;
 7      fastcgi_index index.php;
 8      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 9      include fastcgi_params;
10  }

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

1sudo systemctl restart php-fpm
2sudo systemctl restart nginx

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

1systemctl status php-fpm
2systemctl status nginx

PHP 测试

有了 Web 服务器配置和新包安装,我们应该能够验证 PHP 是否已启动并运行。

1php -v
1[label Output]
2PHP 7.0.1 (cli) (built: Dec 18 2015 16:35:26) ( NTS )
3Copyright (c) 1997-2015 The PHP Group
4Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

您也可以在 Web 服务器的文档根中创建测试文件,尽管其位置取决于您的服务器配置,但文档根通常被设置为这些目录之一:

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

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

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

在 Nginx 上,您可以使用:

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

输入以下代码:

1[label info.php]
2<?php
3phpinfo();

退出编辑器,保存 info.php. 现在,在您的浏览器中加载以下地址:

1http://server_domain_name_or_IP/info.php

您应该看到 PHP 7 信息页面,其中列出正在运行的版本和配置. 一旦您对此进行了双重检查,最安全的是删除 info.php:

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

从这里,你可能想查看Erika Heidi的 Getting Ready for PHP 7博客文章,并查看 官方迁移指南

Published At
Categories with 技术
comments powered by Disqus