如何在 Ubuntu 14.04 上升级到 PHP 7
介绍
PHP 7 于 2015 年 12 月 3 日发布,承诺比以前的语言版本有显着的速度改进,以及标量类型提示等新功能。本指南介绍了如何将运行 PHP 5.x(任何版本)的 Apache 或 Nginx Web 服务器快速升级到 PHP 7。
警告:与大多数主要版本的语言版本一样,最好在生产中切换到 PHP 7 之前稍等片刻。与此同时,现在是测试您的应用程序与新版本的兼容性、执行基准测试并熟悉新语言功能的好时机。
如果您正在与活跃用户一起运行任何服务或应用程序,最安全的做法是首先在临时环境中测试此过程。
先决条件
本指南假设您在 Ubuntu 14.04 机器上运行 PHP 5.x,使用 mod_php
结合 Apache,或者结合使用 PHP-FPM 和 Nginx。它还假设您有一个非 root 用户配置了 sudo
管理任务的权限。
为 PHP 7.0 包添加 PPA
Personal Package Archive 或 PPA 是托管在 Launchpad 上的 Apt 存储库。 PPA 允许第三方开发人员在官方渠道之外为 Ubuntu 构建和分发软件包。它们通常是 beta 软件、修改版本和向后移植到旧版本操作系统的有用来源。
Ondřej Surý 为 Debian 维护 PHP 包,并为 Ubuntu 上的 PHP 7.0 提供 PPA。在执行任何其他操作之前,登录到您的系统,并将 Ondřej 的 PPA 添加到系统的 Apt 源中:
- sudo add-apt-repository ppa:ondrej/php
您将看到 PPA 的描述,然后是继续的提示。按 Enter 继续。
注意:如果您的系统区域设置为 UTF-8 以外的任何设置,添加 PPA 可能会由于作者姓名中的字符处理错误而失败。作为解决方法,您可以安装 language-pack-en-base
以确保生成语言环境,并在添加 PPA 时覆盖系统范围的语言环境设置:
- sudo apt-get install -y language-pack-en-base
- sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
安装 PPA 后,更新本地包缓存以包含其内容:
- sudo apt-get update
现在我们可以访问 PHP 7.0 的包,我们可以替换现有的 PHP 安装。
使用 Apache 升级 mod_php
本节介绍使用 Apache 作为 Web 服务器并使用 mod_php
执行 PHP 代码的系统的升级过程。相反,如果您正在运行 Nginx 和 PHP-FPM,请跳到下一节。
首先,安装新包。这将升级所有重要的 PHP 包,php5-mysql
除外,它将被删除。
- sudo apt-get install php7.0
注意:如果您对 /etc/php5/
中的任何配置文件进行了大量修改,这些文件仍然存在,并且可以被引用。 PHP 7.0 的配置文件现在位于 /etc/php/7.0
中。
如果您使用的是 MySQL,请确保重新添加更新的 PHP MySQL 绑定:
- sudo apt-get install php7.0-mysql
使用 Nginx 升级 PHP-FPM
本节介绍使用Nginx作为Web服务器,使用PHP-FPM执行PHP代码的系统的升级过程。
首先,安装新的 PHP-FPM 包及其依赖项:
- sudo apt-get install php7.0-fpm
系统会提示您继续。按回车键完成安装。
如果您使用的是 MySQL,请务必重新安装 PHP MySQL 绑定:
- sudo apt-get install php7.0-mysql
注意:如果您对 /etc/php5/
中的任何配置文件进行了大量修改,这些文件仍然存在,并且可以被引用。 PHP 7.0 的配置文件现在位于 /etc/php/7.0
中。
更新 Nginx 站点以使用新的套接字路径
Nginx 使用 Unix 域套接字与 PHP-FPM 通信。套接字映射到文件系统上的路径,我们的 PHP 7 安装默认使用新路径:
PHP 5 | PHP 7 |
---|---|
/var/run/php5-fpm.sock | /var/run/php/php7.0-fpm.sock |
使用 nano
(或您选择的编辑器)打开 default
站点配置文件:
- sudo nano /etc/nginx/sites-enabled/default
您的配置可能有所不同。查找以 location ~ \.php${
开头的块,以及类似于 fastcgi_pass unix:/var/run/php5-fpm.sock;
的行。将其更改为使用 unix:/var/run/php/php7.0-fpm.sock
。
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/html;
index index.php index.html index.htm;
server_name server_domain_name_or_IP;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
退出并保存文件。在 nano
中,您可以通过按 Ctrl-X 退出,按 y 确认,然后按 Enter 确认要覆盖的文件名来完成此操作。
您应该对 /etc/nginx/sites-enabled
中定义的任何其他需要支持 PHP 的虚拟站点重复此过程。
现在我们可以重启 nginx
:
- sudo service nginx restart
测试PHP
配置 Web 服务器并安装新包后,我们应该能够验证 PHP 是否已启动并正在运行。首先在命令行检查已安装的 PHP 版本:
- php -v
OutputPHP 7.0.0-5+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by 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 的 PHP 版本和配置信息。仔细检查后,删除 info.php
是最安全的:
- sudo rm /var/www/html/info.php
结论
您现在已经安装了一个有效的 PHP 7。从这里,您可能想查看 Erika Heidi 的官方迁移指南。