[小技巧]導檔案超出php或nginx超時時間,怎們辦?
場景:匯出檔案的時候,會出現一種情況,由於資料量太大而要去資料,組織資料等耗費比較長的時間,遠超php或nginx設定的超時時間的時候怎麼破?
解決辦法:將檔案操作防禦後臺指令碼處理去執行,過幾分鐘再進行下載並且刪除暫存的檔案即可.
虛擬碼的實現:
$file = TEMP_DIR.'/'.$filename;
$cmd = 'php '.ROOT_PATH.'/cron/xxx.php';
if (!file_exists($file)) {
//判斷是否已經在後臺執行
$count = exec('/bin/ps xaww | grep -v grep | grep "'. $cmd . '" |wc -l');
if (intval($count) == 0) {
//先檢查有無資料
...
if (xxx) {
//退出操作
}
//非同步執行
exec("{$cmd} {arguments}> /dev/null &");
}
echo '請10分鐘後再重新整理此頁面';
exit;
} else {
//輸出檔案
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
unlink($file);
exit;
}
//ps:指令碼中可以用$argv接收引數
還有一種相對效率更高的形式是:通過swoole任務去執行,也可以減少指令碼數量,提高程式碼維護成本
相關文章
- php 和 nginx 的幾個超時時間PHPNginx
- ubantu 16.04 PHP 時間差 8 小時解決辦法PHP
- Ubuntu 16.04 PHP 時間差 8 小時解決辦法UbuntuPHP
- Alfred 4使用技巧:找不到檔案或應用程式時怎麼做?Alfred
- ftp複製檔案或資料夾時出錯,操作超時FTP
- 手機小技巧:小米手機時間24小時制怎麼設定
- 時區問題導致時間相差8個小時
- win10調時間找不到檔案怎麼辦_win10調整時間顯示找不到檔案的解決方法Win10
- c++ 獲取檔案建立時間、修改時間、訪問時間、檔案內容長度C++
- JS自動生成24小時時間區間,時間跨度為60或30分鐘JS
- 檔案時間屬性
- PHP時間戳 strtotime()使用方法和技巧PHP時間戳
- 引用js、css檔案時加時間戳JSCSS時間戳
- win10按照時間搜檔案如何操作 win10按照時間怎麼搜尋程式和檔案Win10
- Mac檔案共享不起作用時該怎麼辦Mac
- 45%的長期失業者睡眠時間少於7小時,10.7%的人睡眠時間超過10小時。
- 20個 Javascript 技巧,提高我們的摸魚時間!JavaScript
- ubuntu 修改時區或時間 及網路同步時間Ubuntu
- php nginx 實時輸出PHPNginx
- PHP 時間處理PHP
- PHP 時間函式PHP函式
- PHP時間計算PHP
- PHP CURL 業務呼叫第三方介面設定超時時間PHP
- nginx 502 和 504 超時演示Nginx
- 工作太忙沒時間學習,怎麼辦?
- gRPC為什麼使用截止時間而不是超時時間?RPC
- context裡的超時時間是怎麼在微服務之間傳遞的Context微服務
- Uedior上傳大檔案超時報錯
- win10 點選自動設定時間時間快1小時怎麼解決Win10
- 網站提示408 請求超時怎麼辦網站
- 定時將系統時間更新在日誌檔案中
- php 獲取時間差PHP
- 匹配十二小時制時間格式
- Linux刪除指定時間之前的檔案Linux
- 看詳細到秒的檔案時間
- 良許 | 從命令列同時移動多個檔案型別的小技巧命令列型別
- windows10時間同步出錯怎麼辦Windows
- PHP 小技巧PHP
- Nginx的超時timeout配置詳解Nginx