我想尝试 php 7,并让我的网站在 php 7 上运行,同时让其他网站在 php 5 上运行,以防万一。这样我就可以从域虚拟主机配置中决定运行哪个 php。
我查看了 php 版本管理,发现可以运行两个版本,但我找到的版本似乎适用于 apache。我正在寻找有关如何在 nginx 下执行此操作的更清晰的说明。我还运行了 hhvm,以防万一。
答案1
首先,你需要安装php5-fpm
并php7.0-fpm
从Ondřej Surý 的 PPA 用于可同时安装的 php5 和 php7.0。:
sudo apt-get install python-software-properties
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
然后,我们nginx
建议使用 FPM 包。因此,请相应地安装包:
sudo apt-get update
# We need to ***remove*** php5 packages, so we can use php5.6 packages
# from the PPA instead
sudo apt-get remove php5-common
sudo apt-get autoremove
# Now we install php5.6 packages.
sudo apt-get install php5.6-fpm
# Now, install php7.0-fpm. You may need to install separate PHP plugins
# for databases, extensions, etc. later.
sudo apt-get install php7.0-fpm
来源:关于“如何安装 php 7?”问题的回答,以及我自己的自定义评论和修改。
其次,nginx
. nginx
只能与您的配置一样好。您的 nginx 服务器块上很可能有一个类似于此的 PHP 处理块(来自“默认”示例配置):
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
此配置将仅传递给php5-fpm
。实际上,这将适用于您的整个服务器块。最简单的方法是使用第二个服务器块(例如test.domain.tld
),并提供 PHP 7.0fastcgi_pass
目标。在 Xenial 上的 php7.0 中,最终结果将是这样的(从最近上传到 Xenial nginx 包的修复中提取),但是我不知道 Ondrej 包的布局,所以我无法在那里提供确切的细节(检查/etc/php7.0/fpm/pool.d/www.conf
或类似内容以确定它正在监听的位置):
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php7.0-fpm:
fastcgi_pass unix:/var/run/php7.0-fpm.sock;
}
您必须对您的php5
块做类似的事情,以验证php5.6
使用套接字而不是内置套接字php5
(我们刚刚删除)。
然后,使用第二个测试域运行php7.0
测试。但是,如果您想这样做,请确保复制您的网站 - 可能需要有单独的测试副本,以便您完成使用后php7.0
,您可以毫无问题地“切换”。
不幸的是,没有简单的方法可以在同一个服务器块内制作php5
和php7.0
工作,除非改变你的网站、应用程序等的路径,以便有一个用于php5
,一个用于php7.0
;这样的网站返工可能会变得很糟糕,因此建议运行两个单独的网站代码副本,一个用于php7.0
迁移,一个用于php5
生产。