自php5.0开始,增加了如下是curl支持多线程的函数

curl_multi_init - initialize a new cURL multi handle.
It will return the cURL handle on success and FALSE on error.
curl_multi_add_handle — Add a cURL handle to a cURL multi handle.
curl_multi_exec — Runs all the curl handle in the cURL multi handle in parallel.
curl_multi_remove_handle — Removes a cURL handle from a cURL multi handle.
curl_multi_close — close the cURL multi handle.

弄了个简单的例子

class MultiHttpRequest {
public $urls = array ();
public $curlopt_header = 1;
public $method = "GET";
function __construct($urls = false) {
$this->urls = $urls;
}
function set_urls($urls) {
$this->urls = $urls;
return $this;
}
function is_return_header($b) {
$this->curlopt_header = $b;
return $this;
}
function set_method($m) {
$this->medthod = strtoupper ( $m );
return $this;
}
function start() {
if (! is_array ( $this->urls ) or count ( $this->urls ) == 0) {
return false;
}
$curl = $text = array ();
$handle = curl_multi_init ();
foreach ( $this->urls as $k => $v ) {
$curl [$k] = $this->add_handle ( $handle, $v );
}
$this->exec_handle ( $handle );
foreach ( $this->urls as $k => $v ) {
$text [$k] = curl_multi_getcontent ( $curl [$k] );
echo $text [$k], "nn";
curl_multi_remove_handle ( $handle, $curl [$k] );
}
curl_multi_close ( $handle );
}
private function add_handle(&$handle, $url) {
$curl = curl_init ();
curl_setopt ( $curl, CURLOPT_URL, $url );
curl_setopt ( $curl, CURLOPT_HEADER, $this->curlopt_header );
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_multi_add_handle ( $handle, $curl );
return $curl;
}
private function exec_handle(&$handle) {
$flag = null;
do {
curl_multi_exec ( $handle, $flag );
} while ( $flag > 0 );
}
}
$urls = array ("http://baidu.com", "http://dzone.com", "http://www.g.cn" );
$mp = new MultiHttpRequest ( $urls );
$mp->start ();
?>

Today on history:

  1. 2008:  房价走势和资产价格(0)