前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在CentOS 7上升级到PHP 7

如何在CentOS 7上升级到PHP 7

原创
作者头像
葡萄
修改2018-10-22 11:50:20
1.7K0
修改2018-10-22 11:50:20
举报

介绍

2015年12月3日发布的PHP 7承诺与以前版本的语言相比具有显着的速度提升,以及标量类型提示等新功能。本指南介绍如何使用社区提供的软件包将运行PHP 5.x(任何版本)的Apache或Nginx Web服务器快速升级到PHP 7。

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

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

准备

一台已经设置好可以使用sudo命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

本指南假设您在CentOS 7上运行PHP 5.x,既可以mod_php与Apache一起使用,也可以将PHP-FPM与Nginx结合使用。它还假定您为非root用户配置了管理任务的sudo权限。

订阅IUS社区项目存储库

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

IUS提供了一个安装脚本,用于订阅其存储库并导入相关的GPG密钥。确保您位于主目录中,并使用以下curl命令检索脚本:

代码语言:javascript
复制
cd ~
curl 'https://setup.ius.io/' -o setup-ius.sh

运行脚本:

代码语言:javascript
复制
sudo bash setup-ius.sh

使用Apache进行 mod_php升级

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

首先删除现有的PHP包。按y并在出现提示时按Enter键继续。

代码语言:javascript
复制
sudo yum remove php-cli mod_php php-common

从IUS安装新的PHP 7软件包。再次,在提示时按yEnter

代码语言:javascript
复制
sudo yum install mod_php70u php70u-cli php70u-mysqlnd

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

代码语言:javascript
复制
sudo apachectl restart

您可以使用以下systemctl命令检查由httpd systemd设备管理的Apache的状态:

代码语言:javascript
复制
systemctl status httpd

使用Nginx升级PHP-FPM

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

首先删除现有的PHP包。按y并在出现提示时按Enter键继续。

代码语言:javascript
复制
sudo yum remove php-fpm php-cli php-common

从IUS安装新的PHP 7软件包。再次,在提示时按yEnter

代码语言:javascript
复制
sudo yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd

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

PHP-FPM可以处理多个子进程。根据配置,它提供了一个在/etc/php-fpm.d/www.conf其中定义的,名为www的单个池。使用nano(或您首选的文本编辑器)打开此文件:

代码语言:javascript
复制
sudo nano /etc/php-fpm.d/www.conf

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

代码语言:javascript
复制
; 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

代码语言:javascript
复制
; 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

代码语言:javascript
复制
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;

代码语言:javascript
复制
# 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

代码语言:javascript
复制
sudo nano /etc/nginx/conf.d/default.conf

寻找一个以location ~ \.php$ {块开头的块。在此块中,查找fastcgi_pass指令。注释掉或删除此行,并将其替换为fastcgi_pass php-fpm,将引用上面定义的上游php-fpm.conf

代码语言:javascript
复制
  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,以使新配置指令生效:

代码语言:javascript
复制
sudo systemctl restart php-fpm
sudo systemctl restart nginx

您可以使用systemctl方法检查每项服务的状态:

代码语言:javascript
复制
systemctl status php-fpm
systemctl status nginx

测试PHP

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

代码语言:javascript
复制
php -v
代码语言:javascript
复制
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上,这将是:

代码语言:javascript
复制
sudo nano /var/www/html/info.php

在Nginx上,您可以使用:

代码语言:javascript
复制
sudo nano /usr/share/nginx/html/info.php

粘贴以下代码:

代码语言:javascript
复制
<?php
phpinfo();

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

代码语言:javascript
复制
http://server_domain_name_or_IP/info.php

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

代码语言:javascript
复制
sudo rm /var/www/html/info.php

您现在已经安装了PHP 7。在这里查看官方迁移指南

更多CentOS教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Upgrade to PHP 7 on CentOS 7》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 准备
      • 订阅IUS社区项目存储库
        • 使用Apache进行 mod_php升级
          • 使用Nginx升级PHP-FPM
            • 测试PHP
            相关产品与服务
            云开发 CloudBase
            云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档