2010-09-17 71 views
3

我使用PHP來運行的exec()上的腳本,看起來像這樣:PHP exec()不工作 - 退出提早?沒有錯誤?

exec("pdftk xx.pdf fill_form xx.fdf output xx.pdf flatten"); 

最奇怪的事是,當我登錄到SSH和手動把命令 - 它工作正常!它輸出一個224k pdf。但是當我使用exec()命令時,只有腳本的第一個36k出來。 (我檢查 - 良好的文件的第一個36k是相同的壞文件)

沒有heres奇怪的事情 - 這是工作正常與exec(),直到我添加了一些更多的變量fdf文件,使其更長。我認爲這是一個與fdf有關的問題,因爲新數據 - 但爲什麼這個過程會從ssh運行正常?

更新:我也試着運行php -f test.php(它只有一個exec線)。輸出整個文件正確。但即使我去http://mydomain.com/test.php我只得到文件的一部分。

該腳本不會超時,因爲我使它在exec()命令後回顯某些內容,並且它工作正常。

它不可能是一個權限問題(以root SSH登錄),因爲它仍然能夠寫入文件

也 - 當我試圖從高管或中繼獲得退貨或退出值,我得到沒有。返回值始終爲0。

更新:在Apache的錯誤日誌,我越來越

[週五09月17日20點00分57秒2010] [錯誤]未處理的Java異常: [週五20年9月17日:00:57 2010] [error] java.lang.OutOfMemoryError [Fri Sep 17 20:00:57 2010] [error] <>

我將php_ini從32M更改爲64M - 仍然得到它。考慮到這些都是小文件,我不認爲就是這樣。但PHP能夠限制像這樣的子進程的內存?那裏有另一個設置嗎?

幫助!

+0

hehe閱讀已經太晚,你已經解決了這個問題,但我仍然認爲你應該使用redis,因爲很多用戶同時調用腳本,你的內存使用情況將會脫離圖表,並且你的計算機性能會嚴重下降 – Alfred 2010-09-18 01:51:49

回答

1

事實證明這是一個記憶問題。 Apache在主conf文件中設置了RLimitMEM,我現在只是將其禁用。現在它像一個魅力。雖然它被設置爲大約89MB,並且由於這些文件在meg下,我無法看到這個應用程序如何使用那麼多的內存。

0

我假設你正在運行一個共享的Web主機,在這種情況下,你應該注意:許多主機使用自定義的php.ini文件來限制exec()所做的事情(比如阻止它在所有),或者可能有一些系統就地阻止exec從exec產生的進程運行超過幾秒鐘,這就是爲什麼它可以在shell中正常工作,但不在PHP的上下文中。

+0

這是一個VPS,所以我可以改變php.ini,如果這可以解決它。任何線索可能是什麼?也可以是在Apache中的東西?因爲php -f運行正常,但不是通過完全相同的腳本的網址?或者他們可以設置爲使用不同的ini文件? – dan 2010-09-18 00:19:11

0

更新:在Apache的錯誤日誌,我 越來越

[週五09月17日20點00分57秒2010] [錯誤] 未處理的Java異常:週五09月17日20:00 : 57 2010] [錯誤] java.lang.OutOfMemoryError [週五09月17日 20點零零分57秒2010] [錯誤] <>

我不明白爲什麼阿帕奇是給一個java錯誤?你能和我們一起詳細說明嗎?我覺得很奇怪。

我將php_ini從32M更改爲64M - 仍然得到它。考慮到這些都是小文件,我不認爲這是 它。但PHP能夠限制這樣的子進程的內存嗎? 是否有另一個設置爲 某處?

我也有一種感覺,這可能不得不做一些你的應用程序正在使用的內存,因爲它調用pdftk可以讓你超過內存限制? pdftk調用在峯值時使用多少內存?也許你應該提高記憶力?

你做過這樣的事嗎? http://www.wallpaperama.com/forums/how-to-change-memory-limit-php-apache-server-t53.html

更新:我也嘗試運行PHP -f test.php的(剛度過它的一個高管 線)。輸出整個 文件正確。但即使我去 http://mydomain.com/test.php我只有 得到的文件的一部分。

我有一個解決方案,你也不會殺死你的網絡服務器(VPS)高負載。從網站(網絡服務器端),您應該使用predis php客戶端庫將其推入阻止列表(redis),因爲它支持所有必需的redis命令(BLPOP/LPUSH)。從一個總是運行的PHP deamon(php -f)你應該從阻塞列表中彈出並執行命令(pdftk)。

+0

我認爲這也很奇怪 - 但服務器上沒有其他事情發生,而且這是唯一可能發生的事情。我唯一的猜測是pdftk在它的核心中有某種java? – dan 2010-09-21 21:07:58