2011-11-20 118 views
2

我有腳本需要很長時間才能執行。在結果服務器響應503錯誤。我如何設置更長的執行時間?在php中長時間計算導致503錯誤

在我的PHP腳本我設置:

set_time_limit(0); 
ignore_user_abort(true); 
+0

您的主機是否允許自定義限制? –

回答

1

此問題與PHP Background Processes非常相似。所以讀一下;另外,

首先你需要改變php.ini的時間限制; you cannot change it in the script itself。或者在.htaccess中使用php_value

其次,您可能想要修改如何與用戶交互更友好,以便頁面使用更新;你可以探索ajax; HTTP刷新;針對不同方法的多部分頁面。如果您正在進行長時間的計算,也許您可​​以在後臺啓動它們並更新數據庫,稍後再檢索結果。

0

看一看maximum_execution_time

但據我所知,這通常需要在php.ini中設置,在簡要介紹一下手冊時說它應該可以通過腳本來設置,如果不是在安全模式下。

+0

我使用'set_time_limit(0)'設置了最大執行時間' – pixel

+0

嘗試在php.ini中設置它? –

0

你不知道確切的錯誤?沒有它,我的猜測是內存限制,你也改變了嗎? 檢查你的php.ini:

memory_limit = 128M 
+0

我已經設置了日誌冗長來注意到我沒有看到任何錯誤。另外設置內存限制沒有幫助。 – pixel

+0

既不apache或PHP日誌? – salla

1

儘管你在腳本中設置什麼時間限制,網絡請求可能是因爲客戶端放棄,或更早的時間,因爲在中間任何代理服務器放棄,或可能如果Apache服務器配置爲放棄。

正如另一位回答者提到的那樣; maximum_execution_time變量可能會有所幫助,但如果您沒有讓訪問者長時間等待,情況會更好。

考慮使用示出反饋模式:

  1. 用戶發起行動;例如POST請求
  2. PHP腳本立即返回包含javascript或iframe的頁面。
  3. JavaScript /內部框架調用長時間運行的腳本。
  4. 每隔幾秒鐘,javascript就會使用類似LONGPOLL的機制來更新腳本的使用方式。
  5. 完成或出錯時,javascript會通知並重定向到下一頁。