我對一些後端任務(不是web)使用PHP腳本,我發現有時curl_exec會終止執行腳本而不輸出任何錯誤。我希望我的腳本永久運行在一個循環中,並對此有何想法?curl_exec超時可以終止腳本?
回答
,您需要:
set_time_limit(0);
否則,只要你的腳本運行了30秒(或任何max_execution_time在php.ini中指定),該腳本將退出並出現錯誤。這會中斷腳本可能正在做的任何事情,例如從curl_exec()
獲得回報。
用PHP寫一個守護進程(這基本上是什麼好像你正在做的)can be found here關於慎用。
請確保您有錯誤報告集,把這個在你的PHP文件的頂部:
ini_set('display_errors', true);
error_reporting(E_ALL);
您也可以擴展腳本的執行時間:
ini_set('max_execution_time', 50000);
這很容易被超時問題。
您可以設置捲曲超時(用於獲取網站),例如到60秒通過
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
然後,您需要設置PHP超時高於60秒,
set_time_limit(90);
這個超時在Windows上是實時的,在Unix上是CPU時間,因此在Unix中你需要的時間要少得多。在你的循環中設置PHP超時非常重要,否則就是整體限制,永遠不會滿足你的無限循環。
do {
set_time_limit(90);
// curl stuff
} while (true);
這可以避免中斷執行腳本嗎? – 2010-05-15 00:57:37
是的,如果中斷的原因是PHP超時。如果你沒有設置超時而有(無意的)無限循環,那麼默認超時將遲早會中斷腳本。當然,我們不知道,在超時會阻止它之前,您的腳本是否因其他原因被中斷。 – Sam 2010-05-16 07:22:09
在你的PHP,你可以設置CURLOPT_VERBOSE變量追查問題:
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
這則記錄到STDERR,或到指定的文件使用CURLOPT_STDERR:
curl_setopt($curl, CURLOPT_STDERR, './path/to/file.log');
從命令行,您可以使用以下開關:
* --verbose to report more info to the command line
* --trace <file> or --trace-ascii <file> to trace to a file
可以使用--trace時前面加上時間戳如果你想在進程能夠啓動和運行無限到長篇大論/文件輸出
當您使用上述選項發生錯誤後,請將其發佈,以便我們可以幫助您解決它:) – Michael 2010-05-16 05:20:54
- 1. 暫停PHP腳本,以防止超時
- 2. PHP usleep,以防止腳本超時
- 3. 以bash腳本終止Curl Telnet會話
- 4. php腳本可以停止?
- 5. subprocess:可以溝通()超時,因爲wait()終止?
- 6. 腳本終止時的調用函數
- 7. nohup進程終止時觸發腳本
- 8. 符合條件時終止腳本
- 9. 在進程終止時運行腳本
- 10. hackerrank終止到期超時
- 11. 發佈超時並終止
- 12. 超時終止函數
- 13. bash腳本SFTP退出終止腳本
- 14. 立即終止腳本
- 15. 終止一個IronPython腳本
- 16. Cron終止Python腳本?
- 17. Shell腳本終止通知
- 18. cron作業腳本終止
- 19. 腳本不終止立即
- 20. 終止從foo腳本
- 21. 使用phpexcel終止腳本
- 22. 如何終止Lua腳本?
- 23. curl_exec導致php腳本停止任何事情
- 24. 如何停止python腳本終止?
- 25. curl_exec()始終返回false
- 26. Python:終止一個導入的腳本而不會終止導入的腳本
- 27. 如何終止netcat,以便我的腳本可以再次循環?
- 28. bash腳本超時
- 29. PHP腳本超時
- 30. JavaScript超時腳本
是的,它是用於後端任務。我需要它循環,只要我需要。我需要知道爲什麼curl_exec會終止腳本,以及如何避免這個 – 2010-05-14 14:07:17
請顯示一些代碼。你知道PHP的max_execution_time設置嗎? – 2010-05-14 14:09:26
此任務是否不斷運行(即過程開始並持續數小時),還是某種計劃任務? – 2010-05-16 05:19:48