1. 程式人生 > >【已解決】如何讓PHP返回AJAX後,繼續在後臺執行。(附完整程式碼)

【已解決】如何讓PHP返回AJAX後,繼續在後臺執行。(附完整程式碼)

【場景】

使用者上傳檔案,給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伺服器後,會再次更新本教程。