2011-04-29 126 views
1

我在最近更新到PHP 5.2.17的FreeBSD服務器上運行了一些PHP網站,之後exec("something")停止工作,並且我被要求編寫exec("/full/path/something")php exec()搜索路徑系統範圍設置

由於腳本在可執行文件位於不同位置的不同計算機上運行,​​因此寫入完整路徑是不可接受的。

運行從PHP passthru("set")揭示了PATH變量(用戶 「WWW」)是:

PATH=/sbin:/bin:/usr/sbin:/usr/bin 

我需要PATH指向PHP safe_mode_exec_dir之目錄:

PATH=/usr/phpsafe_bin 

在運行putenv("PATH=/usr/phpsafe_bin") PHP解決了這個問題,但是我需要一個解決方案來修復這臺機器上運行的所有PHP腳本在全局級別上的問題,換句話說就是更改php.ini,Apache設置或其他系統設置。

希望有人可以提供一個很好的解決方案,甚至可以解釋爲什麼這改變了PHP更新。似乎沒有關於如何確定exec()和朋友的搜索路徑的PHP文檔。

+0

你能簡單地啓動Apache之前修復了'PATH'環境變量在'/等/ rc'?您可以使用符號鏈接將分散在您的服務器上的程序填充到_fixed_目錄中:/ usr/local/php_bin /'? – sarnold 2011-04-29 08:16:14

+0

請注意,[safe_mode已棄用](http://us2.php.net/manual/en/features.safe-mode.php),您可以通過關閉它(然後雙擊「檢查所有對'exec'的調用......硬編碼路徑名稱畢竟不是一個壞主意!) – Charles 2011-04-29 08:21:47

回答

0

這不是一個愉快的解決方案,但這是我所能想到的。創建一個腳本文件,執行您建議的更改,然後使用php.ini或.htaccess中的「auto_prepend_file」來包含此腳本。然後實際上運行的每個php腳本都會在執行之前運行該文件,從而更改您的目錄。

注意:你必須非常小心使用這一點,因爲任何錯誤,在前置腳本的額外空白等可以打破整個頁面,現有的功能,如下載腳本,或任意數量的未知的影響。

閱讀更多:http://php.net/manual/en/ini.core.php