1. 程式人生 > 其它 >專案中匯出功能 超時的問題解決方案

專案中匯出功能 超時的問題解決方案

任務計劃超時的問題:

1.http執行超時的問題,不接收通知,或以釘釘訊息方式接收結果;

2.通過命令列 執行方式;

3.也可以通過使用ob_start()和ob_end_flush()緩衝PHP輸出來避免curl過早返回狀態。

頁面匯出超時的問題

匯出功能增加,計算中……提示

計算好後,將計算好的資料存在伺服器上;並存入mysql表;後續可傳送到郵箱;

當同一個老師進行 同一個業務進行匯出時,直接返回excel檔案;

注意事項:需要區分 時間(當天有效),區分老師(許可權不同);

其他方案

但我還想提及一種替代cron作業方法的方法:

您可以從Web伺服器控制下的PHP指令碼派生CLI PHP指令碼。

如果您的指令碼執行時間較長,且必須由某些網站使用者操作觸發

(例如,構建一個非常大的存檔檔案,並在檔案完成後通過電子郵件傳送下載連結),則此功能尤其有用。

我通常使用popen()函式從Web伺服器PHP指令碼派生CLI指令碼。

這樣可以很好地將引數傳輸到新指令碼例項,如下所示:

$bgproc = popen('php "/my/path/my-bckgrnd-proc.php"', 'w');
if($bgproc===false){
  die('Could not open bgrnd process');
}else{
  // send params through stdin pipe to bgrnd process:
  $p1 = serialize($param1);
  $p2 = serialize($param2);
  $p3 = serialize($param3);
  fwrite($bgproc, $p1 . "n" . $p2 . "n" . $p3 . "n");
  pclose($bgproc);
}

在CLI指令碼中,您將收到如下引數。。。

$fp = fopen('php://stdin', 'r');
$param1 = unserialize(fgets($fp));
$param2 = unserialize(fgets($fp));
$param3 = unserialize(fgets($fp));
fclose($fp);

並對它們執行任何需要Web伺服器長時間控制的操作。這種技術在Unix和Windows環境中同樣適用。


文章來源:劉俊濤的部落格
歡迎關注公眾號、留言、評論,一起學習。

__________________________________________________________________________________

若有幫助到您,歡迎點選推薦,您的支援是對我堅持最好的肯定(_)

耶和華是我的牧者,我必不至缺乏。