如何在Ubuntu14.04上升级到PHP7

来自菜鸟教程
跳转至:导航、​搜索

介绍

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 结合使用。 它还假设您有一个配置为具有 sudo 权限的非 root 用户来执行管理任务。

为 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

/etc/nginx/sites-enabled/default

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

<?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 的 为 PHP 7 做好准备 博客文章,并查看 官方迁移指南