[小技巧]導檔案超出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
- 手機小技巧:小米手機時間24小時制怎麼設定
- Alfred 4使用技巧:找不到檔案或應用程式時怎麼做?Alfred
- ftp複製檔案或資料夾時出錯,操作超時FTP
- nginx限制上傳大小和超時時間設定說明/php限制上傳大小NginxPHP
- 時區問題導致時間相差8個小時
- JS自動生成24小時時間區間,時間跨度為60或30分鐘JS
- Linux下修改檔案建立時間(修改檔案更改時間)Linux
- win10調時間找不到檔案怎麼辦_win10調整時間顯示找不到檔案的解決方法Win10
- c++ 獲取檔案建立時間、修改時間、訪問時間、檔案內容長度C++
- 檔案時間屬性
- Mac檔案共享不起作用時該怎麼辦Mac
- 引用js、css檔案時加時間戳JSCSS時間戳
- Timeout 時間已到。在操作完成之前超時時間已過或伺服器未響應。伺服器
- PHP時間戳 strtotime()使用方法和技巧PHP時間戳
- 20個 Javascript 技巧,提高我們的摸魚時間!JavaScript
- JN專案-時間查詢,結束時間比開始時間小給提示
- win10按照時間搜檔案如何操作 win10按照時間怎麼搜尋程式和檔案Win10
- ubuntu 修改時區或時間 及網路同步時間Ubuntu
- 【臨時表空間】11g中使用 SHRINK方法縮小臨時表空間和臨時檔案
- nginx的時間管理Nginx
- Linux修改檔案時間Linux
- 檔案的時間引數
- 上傳檔案超時問題
- php nginx 實時輸出PHPNginx
- 【臨時表空間】11g中使用 SHRINK方法縮小臨時表空間和臨時檔案(續)
- 電腦時間不準怎麼辦 電腦時間不對的解決辦法
- 超時時間已過或伺服器未響應的解決方法伺服器
- PHP CURL 業務呼叫第三方介面設定超時時間PHP
- session超時時間的設定Session
- weblogic設定超時時間Web
- php 將秒數轉換為時間(年、天、小時、分、秒)PHP
- 定時拷貝加時間維的檔案和定時刪除過期檔案
- 使用touch命令修改檔案時間
- 工作太忙沒時間學習,怎麼辦?
- Java中如何得到檔案的建立時間&最後修改時間Java