實現PHP多線程非同步請求的方法有很多,在本文整理了3種不多的常用方法,大家可以參考下
在網上看過很多版本的PHP非同步要求方法,這裡簡單總結幾個常用方法分享給大家 1、用CURL實現一步請求 CURL擴充是我們在開發過程中最常用的一種方法,他是一個強大的HTTP命令列工具,可以類比POST/GET等HTTP請求,然後得到和提取資料,顯示在"標準輸出"(stdout)上面。 樣本: 代碼如下:<?php $cl = curl_init(); $curl_opt = array(CURLOPT_URL, 'http://www.uncletoo.com/demo.php', CURLOPT_RETURNTRANSFER, 1, CURLOPT_TIMEOUT, 1,); curl_setopt_array($cl, $curl_opt); curl_exec($ch); curl_close($ch); ?> 由於CUROPT_TIMEOUT屬性最小值為1,這就意味著在用戶端必須等待1秒,這也是使用CURL方法的缺點 2、用popen()函數實現非同步請求 文法格式:popen(command,mode) 樣本: 代碼如下:<?php $file = popen("/bin/ls","r"); //這裡是要執行的代碼 //... pclose($file); ?> popen()函數直接開啟一個指向進程的管道,速度快,即時相應。但是這個函數是單項的,要麼讀要麼寫,而且如果並發數較大,則會產生大量進程,給伺服器造成負擔。 另外,如同樣本中一樣,程式結束後一定要用pclose()來關閉。 3、用fscokopen()函數實現非同步請求 我們在平時開發郵件發送功能等socket編程時,都會用到這個函數,在使用這個函數之前,我們要在PHP.ini 中開啟 allow_url_fopen 選項,另外在變成時,我們還要自己手動拼接出header部分。 樣本: 代碼如下:$fp = fsockopen("www.uncletoo.com/demo.php", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />n"; } else { $out = "GET /index.php / HTTP/1.1rn"; $out .= "Host: www.uncletoo.comrn"; $out .= "Connection: Closernrn"; fwrite($fp, $out); /*這裡忽略執行結果 *測試時可以開啟 while (!feof($fp)) { echo fgets($fp, 128); }*/ fclose($fp); } PHP本身沒有多線程,但是我們可以用其他方式來實現多線程的效果,上面列舉的三種方式都有各自的優缺點,大家在使用時可以根據程式的需要擇優選擇。 UncleToo經驗尚淺,這裡就簡單總結了這麼多,如果有其他更好的實現PHP多線程的方法可以一起討論!