如何在CentOS7上升级到PHP7
介绍
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
与 Apache 结合使用,或 PHP-FPM 与 Nginx 结合使用。 它还假设您有一个配置为具有 sudo
权限的非 root 用户来执行管理任务。
PHP 5 安装过程记录在这些指南中:
订阅 IUS 社区项目存储库
由于 PHP 7.x 尚未打包在主要发行版的官方存储库中,我们将不得不依赖第三方来源。 几个存储库提供 PHP 7 RPM 文件。 我们将使用 IUS 存储库。
IUS 提供了一个安装脚本,用于订阅他们的存储库并导入相关的 GPG 密钥。 确保您在您的主目录中,并使用 curl
检索脚本:
cd ~ curl 'https://setup.ius.io/' -o setup-ius.sh
运行脚本:
sudo bash setup-ius.sh
使用 Apache 升级 mod_php
本节介绍使用 Apache 作为 Web 服务器和 mod_php
执行 PHP 代码的系统的升级过程。 相反,如果您正在运行 Nginx 和 PHP-FPM,请跳到下一部分。
首先删除现有的 PHP 包。 按 y 并在出现提示时按 Enter 继续。
sudo yum remove php-cli mod_php php-common
从 IUS 安装新的 PHP 7 包。 再次,在出现提示时按 y 和 Enter。
sudo yum install mod_php70u php70u-cli php70u-mysqlnd
最后重启Apache,加载新版本的mod_php
:
sudo apachectl restart
您可以使用 systemctl
检查由 httpd
systemd
单元管理的 Apache 的状态:
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 和 Enter。
sudo 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
中定义。 使用 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 确认,然后 Enter 确认要覆盖的文件名来完成此操作.
接下来,确保 Nginx 使用正确的套接字路径来处理 PHP 文件。 首先打开 /etc/nginx/conf.d/default.conf
:
sudo nano /etc/nginx/conf.d/php-fpm.conf
php-fpm.conf
定义了一个 upstream,可以被其他 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
粘贴以下代码:
信息.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 安装。 从这里,您可能想查看 Erika Heidi 的 为 PHP 7 做好准备 博客文章,并查看 官方迁移指南 。