專案中匯出功能 超時的問題解決方案
阿新 • • 發佈:2021-12-23
任務計劃超時的問題:
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環境中同樣適用。
文章來源:劉俊濤的部落格
歡迎關注公眾號、留言、評論,一起學習。
__________________________________________________________________________________
若有幫助到您,歡迎點選推薦,您的支援是對我堅持最好的肯定(_)
耶和華是我的牧者,我必不至缺乏。