我习惯使用python的virtualenv工具来创建可以模仿我编写的项目的部署环境的独立环境。
现在,我将要开发一个php项目,我想知道是否有相同的东西?具体来说,我希望能够使用一个(较旧的)版本的php在apache上运行一个虚拟主机,而其他所有版本都在正常的最新版本上运行。
我的开发机器正在运行ubuntu 11.04,因此首选在该平台上运行的解决方案。
答案 0 :(得分:10)
假设您使用的是mod_php,则无法将多个不同版本加载到同一个Apache实例中。如果您将PHP作为CGI或FastCGI运行,则可以运行多个不同的版本,但这本身会在mod_php中引入一些行为差异。
答案 1 :(得分:7)
由于使用mod_php在apache中加载不同版本的php似乎不具备可能性,因此模拟部署和开发设置的最简单方法是使用虚拟机,您声明要避免使用虚拟机。
让开发人员更容易负担的一种方法是使用vagrant之类的东西。有两个文件(vagrant文件和chef / puppet文件)你可以"版本"你的虚拟机,可以轻松创建它们并在需要时为每个项目销毁它们。
答案 2 :(得分:7)
虚拟机的另一种替代方法是docker。
答案 3 :(得分:6)
virtPHP是一种在单台机器上创建和管理多个独立PHP环境的工具。它就像Python的virtualenv,但对于PHP。 (自述)
答案 4 :(得分:3)
您可能对此感兴趣:https://github.com/phpenv/phpenv
答案 5 :(得分:2)
(Haven在几年内编写了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 https://github.com/lox/phark构建brew / bundler端口,尽管它还没有部署就绪。
答案 6 :(得分:1)
截至目前,没有开箱即用的解决方案。接近的唯一解决方案是Vagrant和puPHPet.com,如下所述:https://drupal.org/node/2055947 为什么我们不能拥有像python的virtualenv或ruby的rbenv这样的环境?它构成了一个很好的开源项目。如果我们想要在沙箱而不是全局中测试一些库,那么多个PHP实例会很方便。我们可以使用像Composer这样的包管理器为不同的项目安装依赖项。
答案 7 :(得分:0)
带有PHP Selector的Cloudlinux已有很长一段时间了。它与流行的控制面板(如CPanel,DirectAdmin等)集成在一起。
每个linux帐户可以拥有自己的php版本,并选择合适的扩展名。