| /* * 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 ); } } |