2011-08-24 97 views
39

我习惯于使用python的virtualenv工具来创建单独的环境,这些环境可以模拟我编写的项目的部署环境。php是否有相当于python的virtualenv或ruby的沙箱?

现在,我将要开始一个php项目,我想知道是否有任何等价物?具体来说,我希望能够在一个(较旧的)版本的PHP上运行Apache上的一个虚拟主机,而其他一切运行在正常的最新版本上。

我的开发机器运行的是Ubuntu 11.04,所以在该平台上工作的解决方案将是首选。

+0

为什么你会想要这样的东西?你知道,PHP是向后兼容的。即使在不同的5.x版本之间,也很少会出现令人讨厌的差异,即使发生了这些差异,通常也很容易修复。例如,在PHP 5.3和5.2之间没有太多变化(http://pl2.php.net/manual/en/migration53.incompatible.php) - 只有两个新的关键字和一些无效的代码不再工作... – xfix

+6

@GlitchMr我试图在开发服务器上完全复制一个部署环境,以便在部署时没有意外,但我不想为每个部署环境都设置一个全新的虚拟机。如果我可以在apache中使用不同的虚拟主机使用不同版本的PHP,那么我将很长的路要走。 – Zxaos

+0

Docker是您的解决方案。流浪另一种解决方案。 – JREAM

回答

10

假设您正在使用mod_php,则无法将多个不同版本加载到同一个Apache实例中。如果您将PHP作为CGI或FastCGI运行,您可以运行多个不同的版本,但这本身会在mod_php中引入一些行为差异。

2

(已经很多年没有编码的PHP,所以这可能是过时)

至于我记得你刚以指向你的库驻留(包括PATH)另一目录,使用类似:

include_path = .:/usr/local/lib/php:./include (this goes in php.ini, default libararies) 

在你的PHP文件:

ini_set("include_path", ".:../:./include:../include"); 

PHP从来没有真正有一个强大的包装系统和库的储存库如Perl/Python的/ Ruby有,PEAR试图莫在那个方向,但它相比是非常封闭的,很难在多项目环境中配置。

Phark正在尝试构建一个用于php的brew/bundler端口,https://github.com/lox/phark,尽管它没有部署就绪。

+0

这可能适用于库版本,但似乎不会改变使用的核心PHP版本。 – Zxaos

+0

是真的。只是陈述了virtualenv等价物。 (pythonbrew的替代方案更多的是你在找什么)。 – ashwoods

7

当用mod_php在apache中加载不同版本的php似乎不是可行的时,模拟部署和开发设置的最简单方法将与虚拟机一起使用,您希望避免使用这种虚拟机。

让开发人员更轻松地为开发人员减轻负担的一种方法是使用诸如vagrant之类的东西。通过两个文件(vagrant文​​件和厨师/ puppet文件),您可以“版本化”您的虚拟机,轻松创建它们并在需要时为每个项目销毁它们。

1

截至目前,这个问题没有开箱即用的解决方案。接近的唯一解决方案是Vagrant和puPHPet.com,如下所述:https://drupal.org/node/2055947 为什么我们不能拥有像python的virtualenv或ruby的rbenv这样的环境?它构成了一个不错的开源项目。如果我们想在沙箱中测试某些库而不是全局测试,那么PHP的多个实例可能非常方便。我们可以使用像Composer这样的包管理器为不同的项目安装依赖项。

5

virtPHP是用于创建和一台机器上管理多个孤立的PHP环境的工具。这就像Python的virtualenv,但对于PHP。 (自述文件)

https://github.com/virtphp/virtphp

+1

尽管如此,virtPHP只针对php的命令行(php-cli)实例。不幸的是,这并不能解决所述的问题。 – Zxaos

相关问题