2009-11-18 76 views
1

我使用PHP的shell_exec函數在我的服務器上調用bash腳本。現在用PHP的shell_exec調用bash - 緩慢

shell_exec("bash -x /tesladata/isetools/0-extractbytickerforweb.bash $ticker $isedate > /t24alv2/iseoutput/$ticker-$isedate-$thistime.log &"); 

,我以前有從一個CGI腳本運行命令( 「bash的-x ...」),它是要快得多(瞬時)。現在腳本運行(> 10秒)以及生成的頁面呈現需要很長的時間。

任何想法爲什麼這麼慢?我仍然想從PHP運行bash腳本,而不是CGI,因爲我的整個站點正在轉換爲PHP。也許另一個功能更適合?任何想法,將不勝感激。

回答

4

你可以看看PHP的execsystem函數,但我真的不明白爲什麼他們會加快腳本的執行速度,值得一試。我很確定這是apache的一個問題(假設你使用apache),而不是這個結論的來源是this bug thread

此外,你真的應該非常小心在公共網站上使用這些命令。利用escapeshellargescapeshellcmd

3

對於運行Apache作爲NT服務 Windows用戶:看來你可以大大提高了shell_exec()或者exec()的性能通過配置Apache服務與一個用戶賬號不是默認運行系統帳戶

例如,我發現,運行Apache作爲標準NT服務造成了shell_exec()命令以15-17秒(具體地,使用svn命令)。 將Apache服務更改爲使用用戶帳戶運行導致時間降至4-5秒 - 差異很大

爲此,請打開服務控制面板,右鍵單擊Apache服務,然後選擇「屬性」。點擊登錄選項卡,並將「本地系統帳戶」單選按鈕更改爲「此帳戶」。然後指定您希望服務使用哪個用戶帳戶。

請注意,我不是Windows管理員專家;使用用戶帳戶運行服務可能會產生重要的影響,我不知道。

+0

有沒有人測試過?有誰知道如何在Linux中做到這一點? – Cripto 2013-07-06 19:47:24

+0

我測試過,它爲我工作。 Apache 2.4/PHP 5.4.7/Windows 7 – Marek 2013-08-27 12:00:40

+0

它也適用於我。使用Zend Server CE。 – 2014-07-19 14:50:01