2014-02-28 34 views
0

我正在研究依賴批量PDF文檔創建的商業應用程序。PHP長時間運行腳本,jQuery避免超時?

在某一個時間我的應用程序有可能創造幾十個PDF文件,這使得腳本超時...

我不會對我的主機的「參數或者set_time_limit」參數的任何訪問。

現在我依靠手動操作:我的腳本運行5個文件,然後停止。我刷新瀏覽器頁面,重新啓動另外5個腳本,等等。這不是一個可靠的解決方案,因爲用戶必須保持專注並定期刷新!

我正在尋找能夠「替代手動用戶操作」的解決方案。 PHP似乎不是解決方案(由於超時限制)。 jQuery會成爲答案嗎?

怎麼樣?

我搜索了「長輪詢」或「長跑」的話題,但沒有得到任何合適的解決方案。

感謝您的幫助!

+1

jQuery不會超時,服務器進程會這樣做,而修復這個問題的唯一方法就是在PHP中對其進行更改,但jQuery無法完成此操作! – adeneo

+0

你可以在PHP中使用'set_time_limit(0);',如果你想在瀏覽器中調用它,那麼一旦它運行,關閉瀏覽器使用'ignore_user_abort(true);' – CodeBird

+0

使用'set_time_limit()'函數。 –

回答

1

它永遠不會是一個不錯的解決方案。但是你想解決這個問題的方式是可能的。但仍然不推薦:)

function callBackup() { 
    $.ajax({ 
     url : 'backup.php', 
     success : function(response) { 
      // Simple check if backup processed all files 
      if (response != '1') { 
       // Run backup again 
       callBackup(); 
      } else { 
       alert('Backup done'); 
      } 
     } 
    }); 
} 

您在服務器上的腳本需要echo'1';如果你已經處理了一切。

0

我不認爲@ KoalaBear的解決方案將工作。這是PHP超時而不是Jquery。

Set_time_limit(0)是解決此問題的最簡單方法。

另一種解決方案是將此耗時任務委託給後臺進程。

檢查Gearman

background job

一個很好的例子,但是如果你使用的Gearman需要定期輪詢服務器以檢查作業

0

的狀態您可以通過後臺工作人員做到這一點。考慮到Gearman,Redis resque或芹菜任務隊列。不要讓你的客戶等待。