2010-01-21 134 views
1

我相信這是一個權限問題,但不知道如何解決它。PHP exec()調用永遠不會運行

我有一個PHP腳本 - mainscript.php - 調用:

$scriptCall = "/usr/bin/php wrap_prep.php 2>&1 &"; 

當運行mainscript.php,該wrap_prep.php永遠不會執行。但是,當我以root身份登錄到我的web服務器並運行php wrap_prep.php 2>&1 &時,它工作正常。

我已經將兩個腳本都設置爲擁有者和組以及我的apache用戶以及755權限。

我最近重新編譯PHP來添加一個庫(不知道這是否與新問題有關)。

+0

是在與mainscript.php相同的目錄下的wrap_prep.php?否則,您可能需要添加絕對路徑或相對路徑。你的apache error_log中有沒有像「File not found」那樣的東西? – Thilo 2010-01-21 18:43:35

+0

你是否試圖在後臺運行wrap_prep.php? – 2010-01-21 18:51:59

+0

Thilo - 同一個目錄,是的。 彼得 - 是的。 – 2010-01-21 19:38:40

回答

1

首先,你應該簡單地輸出一下命令給你的東西。無論如何,都應該有錯誤信息。

其次,您在PHP腳本中的事實並不一定意味着用戶PHP在其下運行,可以在/usr/bin/php處調用PHP二進制文件。你可以嘗試改變它的權利嗎?

如果這沒有幫助,請檢查您的PHP腳本運行的是哪個用戶。據我所知,posix_getuid()是最準確的工具。確保您設置的權限與您爲其設置權限的用戶真正相同。上述

哦,蒂洛的評論是最明顯的東西,應當先:)

+0

感謝您的回覆。 我試着迴應exec的結果。它返回一個空字符串。 嘗試posix_getuid()...看起來像這可能是一個問題。當我從ssh運行時,我的UID是root或username。但是當我從我的網頁瀏覽器調用它時,UID是99. 也許這就是問題所在。 – 2010-01-21 19:41:03

+0

你能檢查哪個用戶擁有UID 99嗎? – 2010-01-21 19:49:12

+0

使用posix_getpwuid(99)我得到: Array([name] => nobody [passwd] => [uid] => 99 [gid] => 99 [gecos] => Nobody [dir] =>/[shell ] =>/sbin/nologin)99 – 2010-01-21 19:54:23

0

我檢查,以確保您的主機沒有禁用exec完全簽出。我相信phpinfo()告訴你是否。

+0

沒有禁用功能或安全模式。 Thx雖然。 – 2010-01-21 19:42:05

0

如果在windows上運行(我知道OP不是),可能需要將整個命令包裝在一組引號中。

這是解釋here