通过上篇文章清楚了通过curl_multi_*函数可以一次请求多个url,但是也留下了问题,就是结果要等所有数据请求结束一起返回,才能逐个处理数据。优化代码,使先成功请求的url先返回处理结果,而不是等着所有一起返回。
//修改后的模型 do { while (($execrun = curl_multi_exec($mh, $running)) == CURLM_CALL_MULTI_PERFORM) ; //CURLM_OK只是意味着数据传送完毕或者没有数据 可传送 if ($execrun != CURLM_OK) break; //curl_multi_info_read 查询批处理句柄是否单独的传输线程中有消息或信息返回。 while ($done = curl_multi_info_read($mh)) { $info = curl_getinfo($done[‘handle‘]); $tmp_result = curl_multi_getcontent($done[‘handle‘]); $error = curl_error($done[‘handle‘]); curl_multi_remove_handle($mh, $done[‘handle‘]); var_dump($tmp_result); //可以观察到,只要有url请求成功,就会把数据返回生成文件。 file_put_contents(‘curl_multi2.log‘,$tmp_result."\r\n\r\n\r\n\r\n",FILE_APPEND); } if ($running) curl_multi_select($mh); } while ($running);
运行php脚本,很快就会看见 .log文件生成并且有对应数据,而不是整个请求结束才生成完整的log。
参考:http://my.oschina.net/u/586648/blog/184020
时间: 2024-11-13 12:42:59