<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      PHP 返回結果給前端/ajax后,在后臺繼續執行代碼的方法

      . 問題背景
      在實際項目開發中,遇到一個問題:

      前端通過 Ajax 請求后臺 PHP API 接口,執行多文件的打包下載操作,該請求由于需要更新大量的數據(日志、統計等信息)到數據庫且還需要執行較大的磁盤IO操作,導致該請求很耗時間。由于前端頁面的更新需要快速響應,因此需要 PHP 快速返回計算結果,然后后臺繼續執行余下的操作。

      2. 解決方法
      exit() 之后還能繼續執行代碼的方法有 析構函數 __destruct() 以及 register_shutdown_function() (記日志或者xhprof等性能分析等有一定耗時的代碼),但針對 ajax 請求并不能立即返回

      考慮到 HTTP 請求協議中可以通過 flush() 進行局部內容輸出,立即返回請求結果給前端,再將耗時操作繼續執行,即通過該技術解決問題

      {
          $rs = ['code' => 0, 'msg' => 'ok', 'data' => true];
      
          ob_end_clean();
          ob_start();    
          
          //-----------------------------------------------------------------------------------
          //Windows服務器需要加上這行。
          //echo str_repeat(" ",4096);
          echo json_encode($res);//返回結果給ajax
          //-----------------------------------------------------------------------------------
          // get the size of the output
          $size = ob_get_length();
          // send headers to tell the browser to close the connection
          header("Content-Length: $size");
          header('Connection: close');
          header("HTTP/1.1 200 OK");
          header("Content-Type: application/json;charset=utf-8");
          ob_end_flush();
          if(ob_get_length())
              ob_flush();
          flush();
          if (function_exists("fastcgi_finish_request")) { // yii或yaf默認不會立即輸出,加上此句即可(前提是用的fpm)
          fastcgi_finish_request(); // 響應完成, 立即返回到前端,關閉連接
      }
      
       /******** background process starts here ********/
       ignore_user_abort(true);//在關閉連接后,繼續運行php腳本
       /******** background process ********/
       set_time_limit(0); //no time limit,不設置超時時間(根據實際情況使用)
       /******** Rest of your code starts here ********/
       //繼續運行的代碼
       ...
       ...
      對于長時間運行的代碼可以考慮使用消息隊列方式替代 HTTP 的 flush 特性 — 推薦
      后臺異步調用 HTTP 請求的方法可通過 fsockopen 實現

      As of August 2012, all browsers seem to show an all-or-nothing approach to buffering. In other words, while php is operating, no content can be shown.

      In particular this means that the following workarounds listed further down here are ineffective:

      ob_flush (), flush () in any combination with other output buffering functions;

      changes to php.ini involving setting output_buffer and/or zlib.output_compression to 0 or Off;

      setting Apache variables such as "no-gzip" either through apache_setenv ()or through entries in .htaccess.

      So, until browsers begin to show buffered content again, the tips listed here are moot.
      ————————————————

      版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

      原文鏈接:https://blog.csdn.net/aoshilang2249/article/details/82772329

      posted @ 2024-08-12 23:01  mingruqi  閱讀(232)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产一区韩国主播| 亚洲韩国精品无码一区二区三区| 国产精品午夜福利视频| 深田えいみ禁欲后被隔壁人妻| 中文字幕乱妇无码AV在线| 成在人线av无码免费看网站直播 | 久久国产乱子精品免费女| 玩弄放荡人妻少妇系列| 国产精品美女久久久| 亚洲日韩国产二区无码| 国产精品有码在线观看| 国产精品久久久久久人妻精品动漫| 色综合伊人色综合网站| 大香伊蕉在人线国产最新2005| 18禁黄网站免费| 日韩视频一区二区三区视频 | 在线 欧美 中文 亚洲 精品 | 麻豆国产黄色一级免费片| 丰满老熟妇好大bbbbb| 国产高清在线男人的天堂| 国产精品伦人一久二久三久| 一本久久a久久精品综合| 国产区精品福利在线熟女| 起碰免费公开97在线视频| 少妇无码av无码一区| 欧美日韩欧美| 小雪被老外黑人撑破了视频| 亚洲熟妇精品一区二区| 亚洲永久精品日本久精品| 亚洲国产成人久久精品不卡| 国产成人精品亚洲精品密奴| 97在线视频人妻无码| 亚洲精品综合一区二区在线| 国产高清在线精品一区APP| 不卡一区二区国产在线| 麻豆亚州无矿码专区视频| 性欧洲大肥性欧洲大肥女 | 制服 丝袜 亚洲 中文 综合| 在线视频中文字幕二区| 国产午夜福利片在线观看| 亚洲色成人网站www永久四虎|