我有一個PHP腳本,它需要至少1000秒的執行時間才能完成。PHP腳本在沒有錯誤的情況下超時結束
每次大約265秒後終止,沒有錯誤。由於我正在使用循環,因此我測試了迭代次數,並且與循環次數無關,進一步排除了循環中出現錯誤的可能性。
我已經在php.ini中將max_execution_time設置爲10800,並且還更改memory_limit不會影響結果。
請幫忙!我徹底撓了撓頭!
我有一個PHP腳本,它需要至少1000秒的執行時間才能完成。PHP腳本在沒有錯誤的情況下超時結束
每次大約265秒後終止,沒有錯誤。由於我正在使用循環,因此我測試了迭代次數,並且與循環次數無關,進一步排除了循環中出現錯誤的可能性。
我已經在php.ini中將max_execution_time設置爲10800,並且還更改memory_limit不會影響結果。
請幫忙!我徹底撓了撓頭!
你檢查了你的日誌文件嗎?如果您收到錯誤6或分段錯誤。然後你的腳本實際上是崩潰的PHP,而不會在瀏覽器上顯示任何錯誤(如果它是瀏覽器而不是cli)。
如果您在unix上使用apache,那麼您應該在/var/log/apache2/error.log
中找到此日誌。
否則,可以通過加入這一行定義日誌文件的路徑.htaccess
:
php_value error_log "/path/to/somewhere/convenient/php_errors.log"
更改路徑的地方在那裏你的httpd具有寫權限,並在那裏你讀取權限。
得出:
set_time_limit(0);
在腳本的開頭
。以便代碼執行不會超時,除非完成。
我想他說他已經排除了暫停。 – 2012-03-18 18:24:21
沒有幫助..它是無法貫穿整個10800s的時間.. – 7HUND3RX 2012-03-18 20:25:59
@AshishAgrawal顯示您的代碼有問題。 – mithunsatheesh 2012-03-19 03:44:24
這同樣的錯誤發生在我身上。我的一個PHP函數在沒有任何錯誤發送到stderr,stdout或任何其他日誌文件的情況下死亡。
發生了什麼是我正在使用由其他開發人員編寫的助手PHP腳本,該腳本將內存限制設置爲通過我的程序操作的一半的512MB內存。在處理我的腳本的過程中,通過將錯誤日誌設置設置爲無聲,子模塊中毒了該井。
通過在循環的每次迭代中打印出可用於PHP腳本的php系統設置,可以證明這是否發生在您身上。當下標執行髒操作時,PHP引擎在垃圾收集器將來運行在隨機點後拋出適配器,然後立即死亡而沒有錯誤。這是PHP垃圾收集器中的一個錯誤,當垃圾收集器正在完成其工作時,子模塊會混淆系統設置。
解決方案:編輯php helper子模塊,並確保它們不會調整系統設置,因爲垃圾回收器正在完成其工作。在PHP系統變量中毒之後,PHP解釋器會出錯並死掉,沒有任何錯誤或以隨機間隔輸出。
在PHP,以隱藏即使display_errors和error_reporting正確指出記錄錯誤的唯一方法是使用Error Control Operators,
例如:下面的代碼將引發一個致命錯誤,但一個「隱藏」一,它不會出現在日誌或瀏覽器上。
@echo "forgetting the last quote;
所以的display_errors值設置爲開,您正在使用依賴於PHP版本的error_reporting(見差異here),並檢查是否使用的是在你的代碼中的「@」符號。
你的代碼是做什麼的?你確定沒有錯誤嗎?您是否將錯誤顯示設置爲E_ALL?你有沒有用'@'操作符來抑制任何錯誤? – 2012-03-18 18:11:16
確保它不會引發錯誤。你看過日誌文件嗎? – Neysor 2012-03-18 18:13:12
你是從命令行,cron作業,web服務器等運行的嗎?你有沒有嘗試過一種不同的調用方法? – dldnh 2012-03-18 18:13:57