在 freebsd 上安装多个 php 版本及扩展

在 freebsd 上安装多个 php 版本及扩展

我目前正在学习如何使用 freebsd。最近我一直在尝试运行多个 php 版本及其各自的软件包。但是,我在安装时似乎遇到了问题。

php我的安装默认位置是/usr/local/etc/,但我希望能够分别在和中安装php5.2、和。php5.3php5.4/usr/local/etc/php52/usr/local/etc/php53/usr/local/etc/php54

使用端口我只需这样做即可实现这一点cd /usr/ports/lang/php5x && make PREFIX="/usr/local/etc/php5x" install clean

现在的问题是:我该如何对所有的扩展执行相同的操作PHP versions?当我尝试像这样安装 php-extensions 时:cd /usr/ports/lang/php5x-extension && make PREFIX="/usr/local/etc/php5x/lib/php" install clean,我收到此错误

...
===>  PHPizing for php53-bcmath-5.3.17
env: /usr/local/bin/phpize: No such file or directory
*** Error code 127

Stop in /usr/ports/math/php53-bcmath.
*** Error code 1

Stop in /usr/ports/lang/php53-extensions.

我的 PHPize 位于/usr/local/etc/php5x/bin/phpize 那么我该如何获取make或在正确的路径中查找什么phpize? 有没有更干净、更简单的方法来维护多个 php 安装? 我需要实现这一点,因为一些遗留代码在 5.2 上运行并在 5.3 上中断存在兼容性问题。

谢谢。

答案1

没有人谈论的变量称为 PHPBASE:它允许在 FreeBSD 服务器上使用多个 PHP 安装,将每个安装放在自己的目录中。然后在 make.conf 中使用它来将特定的 PHP 模块(php52-somethings 与 php54-somethings)指向正确的“基础”目录。

我曾经见过它被使用过几次,但到目前为止我还不敢亲自尝试。

当我为您寻找一个例子时,我现在实际上找到了一个明显更好的例子......

看这里:

http://webcodingstudio.com/blog/freebsd-92-server-configuration-apache-php-mysql-dns-samba

如果有人(仍然)想知道为什么要这样做:

关键在于所谓的无缝升级。如果您需要为实际用户运行服务器,而不仅仅是在自己的地下室中运行服务器,那么就需要这样做。如果您为用户提供快速升级途径,并能够在版本之间来回切换,他们最终可以迁移。否则,他们最终也会迁移,不是迁移到您提供的 PHP 版本,而是迁移到其他提供商。

答案2

最好的选择是按照 Hennes 的建议:为要使用的每个 Apache+PHP 版本创建一个 jail。这有许多优点,其中最大的两个优点是隔离性(如果您的 PHP 5.2 网站遭到黑客攻击,损害只会局限于 PHP 5.2 Jail)和管理简单性(将 Jail 视为两个独立的 FreeBSD 安装 - 一个运行旧 PHP,一个运行新 PHP - 您不必经历任何麻烦)。

除了我上面链接的手册部分,你可能还想考虑一些可用的监狱管理端口。ezjail相当受人尊敬,而且一些不错的教程使用它,但还有很多其他的——jail在端口树中搜索你就会找到它们。

jail 的一大缺点是,您将为每个要运行的 PHP 版本运行一个独立的 Apache(这意味着,本质上,每个 jail 一个 IP 地址)。如果您只有一个 IP 并且正在执行基于名称的虚拟托管,那么您可以采取一些黑客措施(haproxy 或类似措施,以及根据主机名重新路由到不同的后端),但它们都有各自的缺点。


另一个选项(我在评论中提到的巨大的脚枪)是像使用非标准一样编译 PHP PREFIX,然后手动安装每个扩展 - 调整路径,将phpize二进制文件链接到预期位置,或进行完整的手动构建。

我过去曾以这种方式维护系统(因为我对 PHP 有大量的定制要求),但从未使用过多个版本。您还需要维护单独的 apache 实例(每个实例都加载适当的 PHP 版本),如果您使用基于名称的虚拟主机(类似于 jails),这将不起作用。

使用非监禁方法,您还可以选择进行黑客攻击,以便 Apache 加载多个版本的 PHP 解释器(或将 PHP 作为 CGI 运行),这对基于名称的虚拟主机更友好。您只需小心设置它,以便为每个位置/文件类型调用正确的 PHP 版本。如果您搞砸了,“奇怪的事情”就会开始发生(或者,如果您很幸运,它只是严重崩溃,您不必花费数小时来调试它)。

考虑到这两个选择,Jails 是一个更好的选择 - 预计会消耗更多的磁盘空间,但磁盘很便宜,而且如果你无法升级 PHP 5.2 代码以在较新的版本上运行良好,那么增加的隔离和易于维护几乎肯定是值得的。

答案3

如果您仍想继续安装多个版本的 PHP。您可以使用 轻松完成PHP + fast-cgi。您可以使用PHP-FPM或者mod_fcgid以便轻松调度到正确的 PHP 版本。这里有一个很好的教程安装多个版本。使用网站或应用程序的 vhost-config(apache)来选择它应该运行哪个 PHP。

安装 PHP 版本的方法如下freebsd:从 ports(例如)安装基础 PHP 版本PHP52,然后从源代码安装PHP53PHP54从 ports 安装多个版本可能会导致冲突。或者,您也可以从源代码安装所有 PHP 版本。

相关内容