2014-02-19 122 views
1

我試圖從數據庫中導出相當大量的數據到Excel文件中。我用我的方法學的問題是它需要很長時間,腳本最終會超時。在後臺運行PHPExcel作業

我一直在想辦法在後臺運行我的腳本,但由於我希望我的代碼儘可能靈活,所以我寧願避免使用在共享主機環境中經常禁用的exec(),並且要支持至少PHP 5.2+。我一直試圖通過PHP cURL來運行我的腳本,但是這樣的解決方案似乎並不優雅。

我不確定在這一點上我是否應該提供任何代碼(我只是測試了任何可能的解決方案,所以我寫的所有內容都非常原始),因爲我只是在尋找某人指向正確的方向 - 我我願意做點閱讀。

非常感謝您的幫助:)

+1

Gearman的,但不是所有的共享主機支持它,而不是所有的共享主機支持了很多東西。你只需要明確要求。我會堅持使用exec()我自己 – 2014-02-19 00:39:47

+0

我明白你來自哪裏,但我的主要目標之一是靈活性和兼容性。我可能會考慮你的意見作爲我的最後手段,謝謝:) – finferflu

回答

1

這一進程將繼續在Apache中運行,但是這是一個便攜的解決方案,你可以與如果你想要一個瀏覽器的AJAX請求輕易揭開序幕。

http://quickshiftin.com/blog/2011/04/non-blocking-web-service-processing-in-php/

<?php 
// this script can run forever 
set_time_limit(0); 
  
// tell the client the request has finished processing 
header('Location: index.php');  // redirect (optional) 
header('Status: 200');          // status code 
header('Connection: close');    // disconnect 
  
// clear ob stack 
@ob_end_clean(); 
  
// continue processing once client disconnects 
ignore_user_abort(); 
  
ob_start(); 
/* ------------------------------------------*/ 
/* Message you'll send to client goes here ..*/ 
/* ------------------------------------------*/ 
$iSize = ob_get_length(); 
header("Content-Length: $iSize"); 
  
// if the session needs to be closed, persist it 
// before closing the connection to avoid race 
// conditions in the case of a redirect above 
session_write_close(); 
  
// send the response payload to the client 
@ob_end_flush(); 
flush(); 
  
/* ------------------------------------------*/ 
/* PHP Excel Job goes here ...    */ 
+1

這看起來像一個明智的做法...我會試試看,看看我可以如何將它納入我的工作流程。謝謝! – finferflu