2009-12-13 89 views
2

我有2個Mac,其通用配置要保持同步。對於Apache和PHP,我將配置文件(分別爲httpd.conf和php.ini)存儲在我的Dropbox(~/Dropbox/config)中,並使用符號鏈接從預期位置引用共享。在共享php.ini文件中設置include_path

同樣,我以同樣的方式分享幾個代碼庫。物理文件位於~/Dropbox/Development中,並鏈接到~/Development/。現在我需要共享一個實用程序類庫,我無法弄清楚如何做到這一點。問題在於每個播放目錄都位於我的主目錄中,而且我的用戶名在每臺機器上都不相同。一方面是~/rwilkerson,另一方面是~/rob

我該如何讓我的php.ini來解決這個問題?在我的httpd.conf中,我使用了環境變量。例如,在虛擬主機配置文件中,我可以將我的web根目錄設置爲/Users/${SUDO_USER}/path/to/webroot。由於我使用sudo重新啓動Apache(sudo apachectl restart),因此環境變量會在我所在的任何一臺機器上評估爲正確的用戶名。

據我所知,我不能以類似的方式在我的php.ini中使用變量。我認爲如果我簡單地將兩條路徑都包含在我的include_path中,PHP會忽略給定機器上不存在的路徑,但似乎並非如此。我的共享庫將只包含在正確的路徑之前不正確的路徑。

我找不到任何說明include_path指令如何工作的細微差別的資源,所以我無法找到任何解決此明顯限制的方法。有人有主意嗎?

答:

我結束了使用StasM的解決方案#1以下。在我的httpd.conf文件(也共享),我說:

php_value include_path "/opt/local/lib/php:${HOME}/Dropbox/Development/lib/php/classes" 

這樣做是壓倒在php.ini任何價值和優美的工作。

回答

1

include_path應該忽略不存在的目錄。但除此之外,你可以做一個:

  1. 使用httpd.conf來設置你的include_path通過php_value指令
  2. 如果運行5.3,使用user_ini.filename
  3. 使用auto_prepend_file包括一個腳本,將計算出正確的包含路徑並在每個其他腳本之前使用set_include_path()進行設置。
+0

我認爲'include_path'會忽略不存在的目錄,但似乎並非如此。但是,既然你已經證實,我會做一些進一步的測試。也許我只是沒有做足夠深入的檢查。儘管如此,'httpd.conf'的想法是一個很好的想法。不知道爲什麼我沒有想到這一點,但有沒有辦法讓'php_value include_path' _append_包含路徑而不是覆蓋它? – 2009-12-14 12:28:19

+0

是的,那似乎不起作用。如果我在'include_path'中的'/ Users/rob/Dropbox/dev/lib/php/classes'之前有'/ Users/rwilkerson/Dropbox/dev/lib/php/classes'(在主目錄爲'/Users/rob',這些類不加載,如果我切換順序,他們的確如此。 – 2009-12-14 12:51:56

+0

這看起來像一個錯誤,也許你想提交問題並複製到bugs.php.net? – StasM 2009-12-19 00:34:42

1

我也開發了幾臺機器(所有Mac),並且讓我保持同步的最簡單方法是git,dropbox和zend_config。

我有一個父git目錄,/ git,然後每個項目每個/ git/projecta/git/projectb。這樣你就沒有處理$ HOME或〜/

問題我做任何更改我推到Dropbox,它實時跨所有機器同步。

隨着Zend_Config的我有,我通常在/etc/projecta.ini將指向外部庫,數據庫存儲PARAMS每個項目配置文件等

至於共享庫,我嘗試讓我的每個項目都擁有所有的依賴關係。每個項目都是應用程序,html/public,library。並且庫文件夾將有梨,zend等等,推動。

至於include_path問題,爲什麼不把它存儲在所有機器的通用目錄中。/usr/local/lib/php,然後將其鏈接到dropbox並對所有項目執行相同的操作。然後在你的應用程序中設置include_path到/ usr/local/lib/php或者在php.ini中設置。