我習慣於使用python的virtualenv工具來創建單獨的環境,這些環境可以模擬我編寫的項目的部署環境。php是否有相當於python的virtualenv或ruby的沙箱?
現在,我將要開始一個php項目,我想知道是否有任何等價物?具體來說,我希望能夠在一個(較舊的)版本的PHP上運行Apache上的一個虛擬主機,而其他一切運行在正常的最新版本上。
我的開發機器運行的是Ubuntu 11.04,所以在該平臺上工作的解決方案將是首選。
我習慣於使用python的virtualenv工具來創建單獨的環境,這些環境可以模擬我編寫的項目的部署環境。php是否有相當於python的virtualenv或ruby的沙箱?
現在,我將要開始一個php項目,我想知道是否有任何等價物?具體來說,我希望能夠在一個(較舊的)版本的PHP上運行Apache上的一個虛擬主機,而其他一切運行在正常的最新版本上。
我的開發機器運行的是Ubuntu 11.04,所以在該平臺上工作的解決方案將是首選。
假設您正在使用mod_php,則無法將多個不同版本加載到同一個Apache實例中。如果您將PHP作爲CGI或FastCGI運行,您可以運行多個不同的版本,但這本身會在mod_php中引入一些行爲差異。
(已經很多年沒有編碼的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,儘管它沒有部署就緒。
當用mod_php在apache中加載不同版本的php似乎不是可行的時,模擬部署和開發設置的最簡單方法將與虛擬機一起使用,您希望避免使用這種虛擬機。
讓開發人員更輕鬆地爲開發人員減輕負擔的一種方法是使用諸如vagrant之類的東西。通過兩個文件(vagrant文件和廚師/ puppet文件),您可以「版本化」您的虛擬機,輕鬆創建它們並在需要時爲每個項目銷燬它們。
虛擬機的另一種替代方法是docker。
截至目前,這個問題沒有開箱即用的解決方案。接近的唯一解決方案是Vagrant和puPHPet.com,如下所述:https://drupal.org/node/2055947 爲什麼我們不能擁有像python的virtualenv或ruby的rbenv這樣的環境?它構成了一個不錯的開源項目。如果我們想在沙箱中測試某些庫而不是全局測試,那麼PHP的多個實例可能非常方便。我們可以使用像Composer這樣的包管理器爲不同的項目安裝依賴項。
您可能會感興趣的:https://github.com/phpenv/phpenv
virtPHP是用於創建和一臺機器上管理多個孤立的PHP環境的工具。這就像Python的virtualenv,但對於PHP。 (自述文件)
儘管如此,virtPHP只針對php的命令行(php-cli)實例。不幸的是,這並不能解決所述的問題。 – Zxaos
爲什麼你會想要這樣的東西?你知道,PHP是向後兼容的。即使在不同的5.x版本之間,也很少會出現令人討厭的差異,即使發生了這些差異,通常也很容易修復。例如,在PHP 5.3和5.2之間沒有太多變化(http://pl2.php.net/manual/en/migration53.incompatible.php) - 只有兩個新的關鍵字和一些無效的代碼不再工作... – xfix
@GlitchMr我試圖在開發服務器上完全複製一個部署環境,以便在部署時沒有意外,但我不想爲每個部署環境都設置一個全新的虛擬機。如果我可以在apache中使用不同的虛擬主機使用不同版本的PHP,那麼我將很長的路要走。 – Zxaos
Docker是您的解決方案。流浪另一種解決方案。 – JREAM