проблема с multi curl и simplehtmldom, захватывая только заголовок? - PullRequest
0 голосов
/ 19 марта 2011

Я использую multi curl с simplehtmldom

Я читал это руководство на simplehtmldom: http://simplehtmldom.sourceforge.net/manual_faq.htm#hosting, и в примере используется curl для захвата 1 веб-сайта, я пытаюсь получить несколько, которые я использую multi curl.

Но когда я попытался использовать свой multi curl с simplehtmldom, я получаю сообщение об ошибке из заголовочной части страницы, и оно показывает мне, где есть ошибка, которая находится в строке 39 simple_html_dom.php

    $dom->load(call_user_func_array('file_get_contents', $args), true);

отсюда

// get html dom form file
function file_get_html() {
    $dom = new simple_html_dom;
    $args = func_get_args();
    $dom->load(call_user_func_array('file_get_contents', $args), true);
    return $dom;
}

Это мой скрипт с несколькими керлами.

$urls = array(
   "http://www.html2.com", //$res[0]
   "http://www.html1.com" //$res[1]
   );

$mh = curl_multi_init();

foreach ($urls as $i => $url) {
       $conn[$i]=curl_init($url);
       curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);//return data as string 
       curl_setopt($conn[$i],CURLOPT_FOLLOWLOCATION,1);//follow redirects
       curl_setopt($conn[$i],CURLOPT_MAXREDIRS,2);//maximum redirects
       curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,10);//timeout
       curl_multi_add_handle ($mh,$conn[$i]);
}

do { $n=curl_multi_exec($mh,$active); } while ($active);

foreach ($urls as $i => $url) {
       $res[$i]=curl_multi_getcontent($conn[$i]);
       curl_multi_remove_handle($mh,$conn[$i]);
       curl_close($conn[$i]);

}
curl_multi_close($mh);

и я использовал это

$html = file_get_html($res[0]);

Помогите мне, пожалуйста!

спасибо

1 Ответ

1 голос
/ 19 марта 2011

Вероятно, вы получаете ошибку:

Warning: file_get_contents(): Filename cannot be empty in /tmp/simple_html_dom.php on line 39

Это говорит о том, что то, что вы передаете в file_get_html () ($ res [0]), по какой-то причине пусто - скорее всего из-за необходимости каких-то дополнительных / других параметров CURL. Действительно, если вы отобразите $ res [$ i] в своем цикле, вы увидите это.

Как только вы исправите это, у вас возникнет другая проблема - вы пытаетесь передать html-контент, который вы только что добавили, в file_get_html (), который ожидает какой-то путь к файлу, а не контент. Фактически, file_get_contents может извлекать данные из стандартного URL, поэтому вы можете полностью пропустить все элементы curl, если file_get_contents может правильно извлекать ваши данные.

Если вы хотите сохранить вызовы curl, вы должны передавать $ res [0] в str_get_html (), а не file_get_html ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...