介绍
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
一个下面几行。
; 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
:
; 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;
# 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
:
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
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博客文章,并期待在正式迁移指南 。