$sql = MysqL_query("SELECT url FROM urls") or dIE(MysqL_error()); //query the urls tablewhile($resultSet = MysqL_fetch_array($sql)){ //Put all the urls into one variable // Now for some cURL to run it. $ch = curl_init($resultSet['url']); //load the urls curl_setopt($ch,CURLOPT_TIMEOUT,2); //No need to wait for it to load. Execute it and go. curl_exec($ch); //Execute curl_close($ch); //Close it off } //While loop
我对cURL来说比较新.通过比较新的,我的意思是这是我第一次使用cURL.目前它加载一个2秒钟,然后加载下一个2秒,然后下一个.但是,我想同时加载所有这些.我确信它是可能的,我只是不确定如何.如果有人能指出我正确的方向,我会很感激.
解决方法 您以相同的方式设置每个cURL句柄,然后将它们添加到curl_multi_句柄.要查看的功能是curl_multi_ *功能 documented here.然而,根据我的经验,尝试一次加载太多的URL时出现问题(尽管我目前无法找到我的笔记),所以最后一次我使用curl_mutli_,我一次设置了一批5个URL.编辑:这是一个缩减版本的代码,我使用curl_multi_:
编辑:稍微重写和许多添加的评论,希望会有所帮助.
// -- create all the indivIDual cURL handles and set their options$curl_handles = array();foreach ($urls as $url) { $curl_handles[$url] = curl_init(); curl_setopt($curl_handles[$url],CURLOPT_URL,$url); // set other curl options here}// -- start going through the cURL handles and running them$curl_multi_handle = curl_multi_init();$i = 0; // count where we are in the List so we can break up the runs into smaller blocks$block = array(); // to accumulate the curl_handles for each group we'll run simultaneouslyforeach ($curl_handles as $a_curl_handle) { $i++; // increment the position-counter // add the handle to the curl_multi_handle and to our tracking "block" curl_multi_add_handle($curl_multi_handle,$a_curl_handle); $block[] = $a_curl_handle; // -- check to see if we've got a "full block" to run or if we're at the end of out List of handles if (($i % BLOCK_SIZE == 0) or ($i == count($curl_handles))) { // -- run the block $running = NulL; do { // track the prevIoUs loop's number of handles still running so we can tell if it changes $running_before = $running; // run the block or check on the running block and get the number of sites still running in $running curl_multi_exec($curl_multi_handle,$running); // if the number of sites still running changed,print out a message with the number of sites that are still running. if ($running != $running_before) { echo("Waiting for $running sites to finish...\n"); } } while ($running > 0); // -- once the number still running is 0,curl_multi_ is done,so check the results foreach ($block as $handle) { // http response code $code = curl_getinfo($handle,CURliNFO_http_CODE); // cURL error number $curl_errno = curl_errno($handle); // cURL error message $curl_error = curl_error($handle); // output if there was an error if ($curl_error) { echo(" *** cURL error: ($curl_errno) $curl_error\n"); } // remove the (used) handle from the curl_multi_handle curl_multi_remove_handle($curl_multi_handle,$handle); } // reset the block to empty,since we've run its curl_handles $block = array(); }}// close the curl_multi_handle once we're donecurl_multi_close($curl_multi_handle);
考虑到你不需要任何东西从URL,你可能不需要很多的东西,但这是我如何将请求块块BLOCK_SIZE,等待每个块运行,然后继续前进,并抓住来自cURL的错误.
总结以上是内存溢出为你收集整理的如何使用cURL与PHP同时打开多个URL?全部内容,希望文章能够帮你解决如何使用cURL与PHP同时打开多个URL?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)