这是我目前使用的代码
function curl_get_contents($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
return $data;
}
function meta_scrap($filename, $other, $programming) {
$link = 'https://graph.facebook.com/?id=' . $filename . '&scrape=true&method=post';
$output = curl_get_contents($link);
$output = json_decode($output);
$ogtitle = $output->title;
}
我在一个网页上拨打meta_scrap($filename);
8次。这使得页面加载速度非常慢。有什么我可以做的吗?我读到curl_multi_init()
我试图像这样使用它
function curl_get_contents($pages) {
$ch = curl_init();
$ch = array();
$mh = curl_multi_init();
for ($i = 0; $i < count($pages); $i++) {
$page = $pages[$i];
$ch[$i] = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $page);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_multi_add_handle($mh, $ch[$i]);
}
$running = 0;
do {
curl_multi_exec($mh, $running);
} while ($running > 0);
$data = curl_exec($ch);
$results = reset(json_decode(curl_multi_getcontent($ch[$i]), true));
$resultCount = count($results);
curl_close($ch);
return $data;
}
有了这个,我没有输出?任何人都可以帮我修改我的代码,以便它提供正确的输出吗?
答案 0 :(得分:1)
您似乎已经开始处理多个请求,然后在此处剪切并粘贴一个curl请求处理程序:
$data = curl_exec($ch);
$results = reset(json_decode(curl_multi_getcontent($ch[$i]), true));
$resultCount = count($results);
....但是我无法想象你会在哪里找到使用reset()的代码。
你试图把响应放到$ results中,然后你抛弃这个数组并返回完全不同的东西。
试试这个......
...
$running = count($pages);
do {
curl_multi_exec($mh, $running);
usleep(5000);
} while ($running > 0);
$responses=array();
for ($i = 0; $i < count($pages); $i++) {
$responses[$i]=json_decode(curl_multi_getcontent($ch[$i]), true);
}
return $responses;
如果您将重复使用该功能,那么您还应该移除并关闭每个卷曲手柄,然后在返回之前关闭多手柄。
答案 1 :(得分:0)
我不太了解,但这可能会对你有所帮助。
http://arguments.callee.info/2010/02/21/multiple-curl-requests-with-php/