2010-08-23 96 views
8

我目前正在開發自己的小項目,但我遇到了一些小問題:我想將$ PATH環境變量設置爲./bin,這樣當我使用exec()和類似的函數時,它只會搜索那個二進制文件目錄(除非我明確告訴它)。

我已經試過putenv(),除非我啓用了安全模式,否則我不會工作,我不想這樣做;我也試過apache_setenv(),但那似乎也不奏效。

我還想嘗試其他解決方案嗎?

(我使用的是Linux機器用PHP 5.3.2)

+0

您的意思是「除非我禁用了安全模式」? – greg0ire 2010-08-23 18:25:55

+0

@ greg0ire,不,它實際上不會工作,除非我已啓用安全模式。在手冊頁上查看:http://php.net/manual/en/function.putenv.php – Frxstrem 2010-08-23 18:29:17

+0

「這些指令只有在啓用安全模式時纔有效!」從http://php.net/manual/en/function.putenv.php。這很愚蠢。 – muhmuhten 2010-08-23 18:30:06

回答

5

,你可以這樣做:

exec("PATH=/my/path ./bin"); 
+2

謝謝,爲什麼我沒有想到這一點? :P – Frxstrem 2010-08-23 18:36:11

+0

PATH設置是有點毫無意義的,因爲你也給出了一個實際的相對路徑。 – muhmuhten 2010-08-23 18:53:08

+0

@sreservoir不,它不是。路徑不會影響'。/ bin'的分辨率(在這種情況下,它根本不會影響它,因爲它是一個相對路徑)。如果'。/ bin'是例如一個調用其他應用程序的腳本會影響它們的路徑分辨率。 – Artefacto 2010-08-23 19:02:40

2

而不是路徑設置爲bin並調用foo,你爲什麼不只是明確援引bin/foo

0

如果您爲您的用戶設置了路徑,並且您的腳本以您的用戶身份運行,則唯一需要做的是爲您的shell設置此路徑,但是您的腳本以ie運行。 apache用戶(www數據中的debian-like系統),這個工作,如果你想設置僅在特定情況下,你應該設置此路徑爲用戶explicte

+0

問題是,我不希望它適用於服務器上的任何地方,只能在**一個** PHP腳本中... – Frxstrem 2010-08-23 18:27:09

+0

比,你不能這樣做,而不禁用安全模式(正如我的知識說的,但我可能是錯的),PATH是一個面向shell的環境變量,而不是腳本導向 – canni 2010-08-23 18:29:14

4

以改變在Mac OS X Apache使用該路徑的方式在此描述: http://lists.apple.com/archives/macos-x-server/2008/Sep/msg00433.html

如該交指出:

[A] DD以下文本[在F ILE /System/Library/LaunchDaemons/org.apache.httpd.plist]在第五 行:

<key>EnvironmentVariables</key> 
<dict> 
<key>PATH</key> 
<string>/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin</ string> 
</dict> 

使用此處查看launchd.plist(5)的手冊頁語法的詳細信息,我 。

如果你需要爲CLI會話中運行你的PHP命令,你也可能 需要添加/opt/local/bin作爲一種新的路徑下/etc/paths.d 工作。例如,如下所示:

shell> sudo echo "/opt/local/bin" >> /etc/paths.d/macports 

請參見path_helper(8)的手冊頁。