【已解決】如何讓PHP返回AJAX後,繼續在後臺執行。(附完整程式碼)
阿新 • • 發佈:2019-02-10
【場景】
使用者上傳檔案,給PHP伺服器傳送AJAX檔案及表單。
若插入身份驗證成功+插入資料庫成功,則及時返回success的AJAX資訊。
後臺繼續執行,把檔案上傳到第三方檔案伺服器。
【遇到的問題-1】
PHP持久執行,這種教程網上很多了。但我遇到了個問題,就是控制檯報錯:
Content-Length錯誤。一提交表單,nodejs伺服器直接掛掉了。。。
【解決方案-step1】
成功執行,沒有報錯。控制檯輸出:
【遇到的問題-2】
我的伺服器是Win2003。
經過測試,發現還是要等PHP全部執行完,伺服器才返回AJAX。
【解決方法-step2】
在頭部增加這行:
echo str_repeat(" ",4096);
【全部程式碼如下】
<?php //----------------------------------------------------------------------------------- set_time_limit(0); ob_end_clean(); header("Connection: close"); header("HTTP/1.1 200 OK"); header("Content-type:text/html;charset=utf-8"); header('Access-Control-Allow-Methods:post'); ob_start(); //Windows伺服器需要加上這行。 echo str_repeat(" ",4096); //----------------------------------------------------------------------------------- //接收資料 $vsqx_uid= $_POST['vsqx_uid']; //驗證資訊、執行邏輯 ...... //連線、插入資料庫、關閉資料庫連線。 ...... //----------------------------------------------------------------------------------- $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); flush(); if (function_exists("fastcgi_finish_request")) { fastcgi_finish_request(); } ignore_user_abort(true); set_time_limit(0); //----------------------------------------------------------------------------------- //繼續執行的PHP程式碼 //上傳檔案到第三方伺服器 ......
P.S :等我配置完Linux伺服器後,會再次更新本教程。