1. 程式人生 > >php 提取返回資料,後面程式碼繼續執行封裝函式

php 提取返回資料,後面程式碼繼續執行封裝函式

使用者登入後,記錄使用者登入日誌,傳送登入通知等邏輯不需要使用者等待等場景,可以先返回資料更使用者, 後面登入日誌等返回資料後再執行

提示:nginx和Apache提前返回資料不一樣詳見函式內部程式碼

使用方法:

$data =‘hello world!’; // 字串或陣列,陣列將被轉換成json字串

imme_return($data ,10); //立即返回字串,後面程式最大執行時間10s //執行其它無需使用者等待的程式 //寫入資料庫,redis,傳送通知…

/* 中斷並返回資料,後面程式繼續執行,避免使用者等待(immediate)
 *  可用於返回值後,繼續執行程式,但程式佔得所以自由沒有釋放,一致佔用,務必注意,最好給單獨指令碼執行
* @param   string|array      $data 字串或陣列,陣列將被轉換成json字串
* @param   intval      $set_time_limit 設定後面程式最大執行時間,0不限制,但web頁面設定最大執行時間不一定靠譜,可改用指令碼或單獨開子程序
* @return
*/
function imme_return($data ='',$set_time_limit=20)
{
    $str=is_string($data)  ? $data : json_encode($data);
	echo $str;
	if(function_exists('fastcgi_finish_request')){			//Nginx使用
		fastcgi_finish_request();		//後面輸出客戶端獲取不到
	}else {			//apache 使用
		$size = ob_get_length();
		header("Content-length: $size");
		header('Connection:close');
		ob_end_flush();
		//ob_flush();       //加了沒效果
		flush();         
	}
	ignore_user_abort(true);
	set_time_limit($set_time_limit);
	return true;
}