介绍
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 安装过程在以下指南中得到记录:
- How To Install Linux, Apache, MySQL, PHP (LAMP) Stack On CentOS 7
- How To Install Linux, Nginx, MySQL, PHP (LEMP) Stack On CentOS 7
订阅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. 再次按 y 和 Enter 当提示时。
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. 再次按 y 和 Enter 当提示时。
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博客文章,并查看 官方迁移指南。