2016-05-19 54 views
0

試圖通過PHP執行shell命令

在終端,如果我用echo $PATH我得到我的我已經設置爲/Users/edward/.composer/vendor/bin/:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin:/usr/local/go/bin

在PHP get_current_user()完整路徑給我,我登錄時使用的相同用戶上述終端是edward

但是,如果我運行shell_exec('echo $PATH')我只得到/usr/bin:/bin:/usr/sbin:/sbin這是我的問題,因爲我想使用shell_exec()運行一個命令,它無法找到,因爲$PATH

我使用的是帶有apache2和PHP5.6的Mac OS X 10.11.4。 添加到$PATH.profile.bash_profile似乎沒有任何影響。

P.S.我知道我可以通過在我的shell_exec()調用中簡單地使用可執行文件的完整路徑來解決這個問題,但我在Mac系統上開發並部署到Linux系統並且路徑不相同,所以我寧願修復我的$PATH

+0

[PHP系統調用和$ PATH在OS X中]的可能重複(http://stackoverflow.com/questions/3431858/php-system-calls-and-path-in-os-x) –

+0

請記住,cli php可以有(默認情況下是imho)他自己的php.ini ... – donald123

+0

如果你'shell_exec(「id -un」)'可能表明路徑屬於誰。 (我被告知明白'id -un'是OSX相當於* NIX'whoami') – apokryfos

回答

0

它來自$ _SERVER [「路徑」],當你在瀏覽器上運行它(通過Apache服務)。當「你」(愛德華)在shell終端上運行它時,它將與「echo $ PATH」不同。 apache web服務器將以'apache'或'httpd'用戶權限運行。 「/ usr/bin:/ bin:/ usr/sbin:/ sbin」是apache服務器用戶的$ PATH的值。

您可能希望看到:http://php.net/putenv & http://php.net/apache_setenv

附註:如果您打算使用此生產,使用的getenv(「路徑」)將遠,而不是優雅了shell_exec(「回聲$ PATH」 )。

+0

正如我在我的文章中寫道的:「在PHP中get_current_user()給了我與上面登錄的用戶相同的用戶終端是愛德華「,我沒有在瀏覽器中運行PHP(這對我來說甚至沒有意義) –

+0

'get_current_user()'返回當前PHP腳本的所有者的名稱]並因此可能不相關這裏。比照http://php.net/manual/en/function.get-current-user.php –

+0

正如[系統調用和OS X中的$ PATH]中所述(http://stackoverflow.com/questions/3431858/php -system-calls-and-path-in-os-x),與〜。.MacOSX/environment.plist中的內容同步.profile中設置的內容。 –