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

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

我的php安装的默认位置是/usr/local/etc/ ,但是我希望能够在/usr/local/etc/php52安装php5.2php5.3/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扩展如下: 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或者其他方法来查找正确path下的phpize ? 有没有更清洁,可能是更简单的方法来维护多个PHP安装? 我需要做到这一点,因为在5.2上运行的一些遗留代码的兼容性问题以及5.3上的中断问题。

谢谢。

没有人提到的variables叫做PHPBASE:它允许在FreeBSD服务器上使用多个PHP安装,将每个安装在自己的目录中。 然后它被用在make.conf中,在特定的“base”目录下指定特定的PHP模块(php52-somethings与php54-somethings)。

我已经看到它使用了几次,但到目前为止,我自己也不敢尝试。

当我为你寻找一个例子时,我现在实际上find了一个更好的例子…

看这里:

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

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

关键是所谓的无缝升级。 如果你需要为真正的用户运行服务器,而不仅仅是在你自己的地下室,你就可以做这件事。 如果您为用户提供了一个快速升级途径,并且能够在不同版本之间切换,则最终可以进行迁移。 否则,他们最终也会迁移到您提供给他们的PHP版本,而不是另一个提供者。

您最好的select就像Hennes所说的那样: 为每个想要使用的Apache + PHP版本创build一个监狱 。 这有很多好处,最大的两个是隔离(如果你的PHP 5.2网站被黑客攻破,PHP 5.2 Jail就会受到破坏)和简单的pipe理(把jails当作两个独立的FreeBSD安装 – 一个运行旧的PHP,一个运行新的PHP – 你不必跳过任何箍)。

除了上面链接的手册部分之外,您可能还想考虑一些可用的监狱pipe理端口。 ezjail是相当好的,有一些很好的教程使用它,但也有许多其他 – 在端口树searchjail ,你会发现他们。

监狱的巨大缺点是,你将运行一个独立的Apache为每个你想运行的PHP版本(这意味着,基本上,每个监狱一个IP地址)。 如果你只有一个IP,并且正在进行基于名称的虚拟主机,那么你可以做一些hack(haproxy或类似的,并根据主机名重新路由到不同的后端),但它们都是自己的方式。


另一个选项(我在我的评论中提到的巨大的脚步枪)是编译PHP,就像你使用非标准的PREFIX ,然后手动安装每个扩展 – 调整你的path,将phpize二进制连接到预期的位置,或做一个完整的手动构build。

我以前用这种方式维护系统(由于我的PHP需求量大),但从来没有多个版本。 您还需要维护单独的apache实例(每个都加载相应的PHP版本),如果您使用基于名称的虚拟主机(类似于jail),这将不起作用。

使用非监禁的方法,您也可以select进行黑客攻击,以便Apache加载多个版本的PHP解释器(或者将PHP作为CGI运行),这对于基于名称的虚拟主机更为友好。 您只需要注意设置它,以便为每个位置/文件types调用正确版本的PHP。 如果你搞砸了“奇怪的事情”(或者,如果你幸运的话,它就会崩溃,而且你不用花费几个小时来debugging它)。

鉴于这两种select,Jail是一个非常优越的select – 希望能够多占用一些磁盘空间,但是磁盘价格便宜,而且如果您不能升级PHP 5.2代码以发挥更好的性能,在更新的版本上。

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

这就是你应该如何安装freebsd的PHP版本:从端口安装基本的PHP版本,例如PHP52 ,然后从源代码安装PHP53PHP54 。 从端口安装多个版本可能会导致冲突。 或者你可以从源码安装所有的PHP版本。