非同步執行PHP任務fsockopen的乾貨

2020-07-16 10:05:56

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其它相關文章!