|
/*
* Curl Multithreading
* Usage:
* ========================================
$ Urls = array ("http://baidu.com", "http://dzone.com", "http://google.com ");
$ Mp = new MultiHttpRequest ($ urls );
$ Mp-> start ();
* ========================================
*/
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 ){
Curl_multi_getcontent ($ curl [$ k]);
Echo $ curl [$ k]. "\ n ";
// $ Text [$ k] = curl_multi_getcontent ($ curl [$ k]);
// Echo $ text [$ k], "\ n ";
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 );
}
}
|