Я использую multi curl with simplehtmldom
Я читал это руководство по simplehtmldom: http://simplehtmldom.sourceforge.net/manual_faq.htm#hosting, и пример использует curl для захвата 1 веб-сайта, я пытаюсь захватить несколько, которые я использую 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);
-$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]);
Помоги мне, пожалуйста!
Спасибо
Ошибка, которую вы получаете, скорее всего:
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, которое вы только что извлекли, в файл_get_html (), который ожидает какой-то путь к файлу, а не контент. Фактически, file_get_contents могут извлекаться из стандартного URL-адреса, поэтому вы можете полностью пропустить все завитки, если file_get_contents сможет правильно вывести ваши данные.
Если вы хотите сохранить вызовы curl, вам следует передать $ res [0] в str_get_html (), а не file_get_html ().