如何安装两个版本的 PHP 并在它们之间轻松切换?

Deb*_*sad 77 server lamp php apache2

我想在我的 Ubuntu 机器上安装 PHP 5.2.17 和 PHP 5.3.5,并根据需要进行切换。我怎样才能做到这一点?

ane*_*hep 61

您可以使用 php 版本管理器来实现这一点。可以使用不同的版本管理器,例如:

我最喜欢的是phpbrew。希望这可以帮助。

  • 虽然这在理论上可以回答这个问题,但 [最好](​​http://meta.stackexchange.com/q/8259) 在此处包含答案的基本部分,并提供链接以供参考。 (17认同)
  • 具有讽刺意味的是,不只发布链接的原因之一是 linkrot,这篇文章现在受到了影响。 (7认同)
  • 谢谢,能附上说明吗?(onnu vishadheekarikkamo?) (2认同)
  • 只需检查他们网站上有非常好的文档的链接。你真的想让我从他们的网站上复制粘贴东西吗?。 (2认同)

Nan*_*nne 20

可以同时运行 2 个不同的 PHP 版本,但这并不像 apt-getting 它们那么容易。您需要运行一个单独安装的版本并根据您的 apache 配置中的设置提供它。

例如,您可以使用 fastcgi 执行此操作:基本上您要查找的是您在此页面上看到的配置。您可以根据需要的情况/端口/域在配置中添加不同的处理程序。安装两个版本后,诀窍是这一步:

===来自那个页面==

  1. 最后一步是创建虚拟主机。最后我在/etc/apache2/sites-enabled下有3个文件:000-default、php5.3.17和php5.4.7,内容如下

默认:

    <VirtualHost *:80>
      ServerName localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php5317.fcgi
      </Directory>
    </VirtualHost>
Run Code Online (Sandbox Code Playgroud)

php5.3.17:

    <VirtualHost *:80>
      ServerName 5317.localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php5317.fcgi
      </Directory>
    </VirtualHost>
Run Code Online (Sandbox Code Playgroud)

php5.4.7:

    <VirtualHost *:80>
      ServerName 547.localhost
      DocumentRoot /var/www
      <Directory "/var/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
        AddHandler php-cgi .php
        Action php-cgi /php-fcgi/php547.fcgi
      </Directory>
    </VirtualHost>
Run Code Online (Sandbox Code Playgroud)

有关完整安装请参阅链接问题。不要忘记查看标题中的两个链接,它们看起来像不错的教程(但压缩程度较低)。

(不要因为链接的问题是一个没有接受答案的大问题而感到沮丧。该方法应该(并且确实)工作正常,但用户忘记使用<?php<?关闭短标签,请参阅评论)


Mar*_*gil 14

我安装了 php 5.6 和 7.0,但除了所有提示之外,它一直在运行 5.6,所以这个命令节省了一天(在我的情况下,我选择了选项 1 并重新启动 apache):

sudo update-alternatives --config php
Run Code Online (Sandbox Code Playgroud)


小智 6

这个对我有用https : //lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu

与“Growling Flea”中的脚本相同,但使用了新版本。

添加 PPA

PHP 5.6 和 PHP 7.0 软件包来自第三方 PPA,不是由 Canonical 的官方 Ubuntu 存储库提供的。我在这里推荐的 PPA 来自 Ond?ej Surý,他为 Debian 打包了 PHP(然后由 Ubuntu 使用),因此虽然它不是官方存储库,但他并不是完全随机的!PPA 本身就 在这里

要将 PPA 添加到您的设置中:

sudo add-apt-repository ppa:ondrej/php  
Run Code Online (Sandbox Code Playgroud)

然后我们还想从这个新的 PPA 中获取有关所提供内容的信息,然后运行:

sudo apt-get update   
Run Code Online (Sandbox Code Playgroud)

安装新的 PHP 版本

我已经安装了一些 php5 包,但我没有卸载任何东西,当我要求它安装新版本时,我只是让 apt 计算出它想要做什么:

sudo apt-get install php5.6 php7.0
Run Code Online (Sandbox Code Playgroud)

这导致了很多来自 apt 的抱怨和很多冲突。第一个建议的解决方案是删除所有现有的 php5 软件包,以便可以安装 PHP 5.6 - 所以我只接受了第一个建议。

我使用 apache,所以这个设置给了我 php5.6 和 php7.0 模块可用的 apache,并且实际加载了 php5.6 模块。

除了 PHP 本身之外,您期望使用 PHP 的所有扩展和其他工具都适用于两个版本的 PHP,因此很容易添加您需要的模块。我对这件事做得非常好印象非常深刻。

配置和切换版本

现在您的系统上安装了两个完全独立的 PHP 版本,让我们看看所有部分都去哪儿了!

配置文件都在/etc/php/5.6/etc/php/7.0 分别 - 在里面你可以配置加载哪些扩展,设置ini设置,以及隔离每个版本的所有其他内容。

我是 apache 用户,正如我提到的,这两个模块都可用。所以要从一个切换到另一个我需要做:

sudo a2dismod php5.6
sudo a2enmod php7.0
sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

对于 nginx 用户,更改几乎一样简单,Digital Ocean 有很好的文档(他们确实有很棒的文档!)所以查看他们的指南:https : //www.digitalocean.com/community/tutorials/how-to- upgrade-to-php-7-on-ubuntu-14-04, 因为它包含一个关于重新配置 nginx 以使用另一个版本的 PHP 的部分。

从命令行,我有 php5.6 和 php7.0 作为命令可用。我还有一个 php 命令 - 在 /etc/alternatives 中查看它是否符号链接到特定版本的 PHP cli*。您还可以通过运行php -v.

* 更具体地说,运行 which php 以查看正在使用哪个版本的 PHP - 但这可能指向/usr/bin/php,这对我来说本身就是/etc/alternatives/php命令的符号链接。

使用扩展

这个 PPA 带有通常的 php-pear 包,它为两个版本的 PHP 提供了 pecl 命令,因此可以通过通常的方式安装通过 PECL 可用的任何扩展。您还需要相关的头文件,因此应该安装 php5.6-dev 或 php7.0-dev。

pecl 安装完成后,您将收到一条将 *.so 文件添加到 php.ini 的注释;事实上,这里最好的做法是查看/etc/php/mods-available. 这里已经有一些模块,每个模块都在自己的文件中,以扩展名命名并以 .ini 结尾。您可以复制一个用作模板或创建自己的模板并将扩展的所有相关配置放入其中(至少,您需要extension=[extensionName].so)。

一旦新扩展程序可用,启用并通过执行以下操作检查它:

sudo phpenmod extension  
php -m  
Run Code Online (Sandbox Code Playgroud)

这将在正确的位置为您当前版本的 PHP 创建符号链接以加载此模块,您应该在php -m. 专业提示:如果您没有在输出中看到它,请一直滚动到输出的顶部,看看那里是否有任何有用的错误消息。


Mek*_*ekk 2

问题:

\n\n
    \n
  1. 单个 apache 实例不能同时运行两个不同的 PHP 版本(至少据我所知)。

  2. \n
  3. 无法从包中安装两个不同的 PHP 版本,因为它们会发生冲突(并尝试覆盖相同的目录)。

  4. \n
\n\n

解决方案:

\n\n
    \n
  • b) 从源代码手动编译 \xe2\x80\x9ethe other\xe2\x80\x9d PHP 版本(或者如果您愿意,获取适当包的源代码并修改它以避免冲突并修改安装路径)

  • \n
  • a) 使用不同的模块路径和单独的启动脚本为 apache 创建单独的配置集。当然,在单独的端口上运行它。

  • \n
\n

  • 一个 apache 实例_可以_同时运行 2 个 php 版本。 (4认同)

Mar*_*ing 0

如果您想同时运行它们,则需要两个不同的端口。也许您可以使用一个简单的脚本更改您的 apache 配置(httpd.conf),该脚本在启动 apache 之前将一个或另一个版本移动到正确的位置。