php 是不是有相当于 python 的 virtualenv 或 ruby​​ 的沙箱?

Posted

技术标签:

【中文标题】php 是不是有相当于 python 的 virtualenv 或 ruby​​ 的沙箱?【英文标题】:Does php have an equivalent to python's virtualenv or ruby's sandbox?php 是否有相当于 python 的 virtualenv 或 ruby​​ 的沙箱? 【发布时间】:2011-11-03 04:11:45 【问题描述】:

我习惯于使用 python 的 virtualenv 工具来创建单独的环境,这些环境可以模仿我编写的项目的部署环境。

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

我的开发机器运行的是 ubuntu 11.04,因此首选在该平台上运行的解决方案。

【问题讨论】:

你为什么想要这样的东西?你看,PHP 是为了向后兼容而设计的。即使在不同的 5.x 版本之间,也很少有令人讨厌的差异,即使发生这种差异,通常也很容易修复。例如,在 PHP 5.3 和 5.2 之间没有太多变化 (pl2.php.net/manual/en/migration53.incompatible.php) - 只有两个新关键字和一些无效代码不再起作用...... @GlitchMr 我正在尝试在开发服务器上准确复制部署环境,以便在部署时不会出现意外,但我不想为每个人都设置一个全新的虚拟机部署环境。如果我可以让 apache 中的不同虚拟主机使用不同版本的 PHP,那么实现这一目标还有很长的路要走。 Docker 是您的解决方案。 Vagrant 寻求另一种解决方案。 【参考方案1】:

带有 PHP 选择器的 Cloudlinux 已经有很长时间了。它集成了流行的控制面板,如 CPanel、DirectAdmin 等。

每个 linux 帐户都可以拥有自己的 php 版本并选择适合的任何扩展。

https://www.cloudlinux.com/php-selector

【讨论】:

【参考方案2】:

virtPHP 是一个用于在单台机器上创建和管理多个隔离 PHP 环境的工具。它就像 Python 的 virtualenv,但用于 PHP。 (自述文件)

https://github.com/virtphp/virtphp

【讨论】:

不过,截至 2015 年 7 月,virtPHP 仅针对 php 的命令行 (php-cli) 实例。不幸的是,这无助于解决上述问题。【参考方案3】:

您可能对此感兴趣:https://github.com/phpenv/phpenv

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

虚拟机的另一个替代方案是docker。

【讨论】:

【参考方案6】:

由于在 apache 中使用 mod_php 加载不同版本的 php 似乎是不可能的,所以模仿部署和开发设置的最简单方法是使用虚拟机,您表示您希望避免使用虚拟机。

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

【讨论】:

【参考方案7】:

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

【讨论】:

独立的 virt.environments 可以在 IDE 中选择不同版本的解释器来进行 linting、代码验证等。因此,它不仅仅是使用不同的解释器运行应用程序。【参考方案8】:

(好几年没写过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,尽管它尚未准备好部署。

【讨论】:

这可能适用于库版本,但似乎无法更改使用的核心 PHP 版本。 真的。只是说明virtualenv等价物。 (pythonbrew 替代品更符合您的需求)。

以上是关于php 是不是有相当于 python 的 virtualenv 或 ruby​​ 的沙箱?的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS X 是不是有 virt-manager 替代品? [关闭]

javascript中是不是有相当于“新数组(数字)”的PHP?

pthread_create 使用 85MB VIRT 而不是 8MB VIRT

kvm 虚拟机 实用工具笔记(方便查看ip 磁盘复制和修改文件等)

PHP 相当于 Python 的 __name__ == "__main__"?

python 在https://rwmj.wordpress.com/2010/10/26/tip-find-the-ip-address-of-a-virtual-machine/中将端口“virt