PHP非同步執行任務fsockopen的實用方法
我們建立了一個基於fsockopen的函數,這個函數中利用fsockopen去存取url,但是在存取時,並不要求獲取url顯示的內容,而是僅僅發出存取請求,請求到達後馬上關閉這個存取。
這樣做的好處就是無需再等待被存取的url是否返回了可靠的資訊,節約了時間,這段程式碼的執行時間在0.1-0.2秒之間,對於普通訪客而言,幾乎察覺不到。因此,在使用時,僅需要呼叫這個函數和對應的url即可。不過,這裡並沒有提供資料傳輸的部分,如何傳輸資料,其實只需要在$header中增加post的內容即可。
/** * @生生 2018/12/24 19:25:06 * [asynchronous PHP非同步執行任務] * @param string $url 執行任務的url地址 * @param array $post_data 需要post提交的資料POST * @param array $cookie cookie資料用於登入等的設定(此處內部呼叫,無需鑑權) * @return boole */ public function asynchronous($url,$post_data = array()) { $url_array = parse_url($url); dump($url_array); //用fsockopen()嘗試連線 $fp = fsockopen($url_array['host'], 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />n"; } else { //建立成功後,向伺服器寫入資料 $getPath = isset($url_array['path']) ? $url_array['path'] : '/'; $out = "GET /".$getPath."/ HTTP/1.1rn"; $out .= "Host:".$url_array['host']."rn"; $out .= "Connection: Closernrn"; fwrite($fp, $out); /*忽略執行結果 while (!feof($fp)) { echo fgets($fp, 128); }*/ //關閉連結 fclose($fp); } }
呼叫方法
/** * 非同步方法 * 引數:(string)要執行的方法url,(array)傳入引數 */ function yibu(){ $this->asynchronous('https://www.liqingbo.cn/index.php/admin/index/test',['1'=>'haha']); //直接返回結果 echo '操作成功'; }
推薦教學:《PHP視訊教學》
以上就是非同步執行PHP任務fsockopen的乾貨的詳細內容,更多請關注TW511.COM其它相關文章!