先直接列出安装步骤

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.1-fpm
sudo apt-get install php7.1
sudo apt-get install php7.1-mbstring
sudo apt-get install php7.1-dom
sudo apt-get install php7.1-mysql
sudo apt-get install php7.1-curl

主要强调两点

  • 1. php7.1-fpm 一定要先于 php7.1 安装

为什么?说一下笔者实际碰到的情况:在未安装 php7.1-fpm 的情况下,装完 php7.1 后我去访问 Laravel 项目(staging 环境,web server 是 nginx),页面上赫然显示着 APACHE 的默认页面

apache-default-page

当时就感觉像穿越了一般,我明明用的是 nginx 啊!就安装了一个 php7.1 而已,怎么一秒钟飞机变大炮了?带着无比扭曲的心情,google 到了如下的解释(原文网址):

As you can see with, e.g., apt show php7.1, php7.1 depends on libapache2-mod-php7.1 OR php7.1-fpm OR php7.1-cgi. If none of those packages are installed, Apt will install the first one, libapache2-mod-php7.1, which in turn depends on Apache. But you want to install php7.1-fpm instead; in that case you can either install it before php7.1 or simultaneously (i.e., sudo apt install php7.1 php7.1-fpm).

所以 php7.1 默认安装了 apache2 的依赖,我在 /etc/php/7.1 目录下果然发现了 apache2,内心各种奇珍异兽裸奔。。。

知道了原理后,再 sudo apt-get install php7.1-fpm 安装 php7.1-fpm 的过程中,自动就把 apache2 的依赖卸载了。去 /etc/php/7.1 确认 cli 和 fpm 是否都有了(apache2 的目录并未自动删除,里面只有一个包含链接文件的 conf.d),然后在 /var/run/php 确认 php7.1-fpm.sock 是否也已经生成。

最后,别忘了修改项目的 nginx 配置,再 reload 就行了

...

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
    fastcgi_index index.php;

...
  • 2. php 模块不要漏装

举个例子:如果你用的是 mysql,并且漏装了 php7.1-mysql 模块,你会碰到 PDOException “could not find driver” 的报错。新升级环境会经常碰到类似问题,不要着急,网上肯定有一大堆人遇到过。


参考资料: