2011-08-24 104 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

相關問題