由于某些原因,当我迭代一些网址时,下面的代码,curl_exec永远不会返回任何内容。我已经验证了它获得的网址是否正确。我已手动检查它们以查看是否有输出。我已经尝试删除CURLOPT_RETURNTRANSFER,curl_exec将返回true。我不确定为什么curl_exec没有返回我需要的数据。
function _curl_get($urls)
{
$html_str = '';
foreach ($urls as $url)
{
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$html_str .= curl_exec($curl_handle);
curl_close($curl_handle);
}
return $html_str;
}
答案 0 :(得分:6)
检查错误:
$data = curl_exec($curl_handle);
if ($data === FALSE) {
die(curl_error($curl_handle));
} else {
$html_str .= $data;
}
永远不要假设依赖外部资源的操作成功。只有一种方法可以正常运行,而且几乎有成百上千种方法可以解决问题。假设发生1:100或1:1000的机会是不好的方法。
从效率上来说,没有必要重复实例化/关闭卷曲对象。您可以将其重复用于多个网址。特别是因为它们都以同样的方式被取出。在循环外部创建一个curl句柄,在循环内重复使用它(每次都设置url),然后在循环结束后关闭它。