Это код, который я использую в настоящее время
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;
}
С этим я не получаю выход? Может ли кто-нибудь помочь мне изменить мой код, чтобы он дал правильный результат?
Кажется, вы начали работать с несколькими запросами, а затем вырезали и вставляли один обработчик запросов 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;
Если вы будете повторно использовать функцию, тогда вы должны также удалить и закрыть каждый рулон сгиба, а затем закрыть мультирум перед возвратом.
См. Также мое последнее сообщение в блоге о curl_multi_exec().
Я мало знаю, но это, вероятно, поможет вам.
http://arguments.callee.info/2010/02/21/multiple-curl-requests-with-php/