Re: Проблемы с PHP Simple HTML DOM
От: kov_serg Россия  
Дата: 19.07.19 10:13
Оценка: 4 (1)
Здравствуйте, Funny Rabbit, Вы писали:

FR>Делаю парсер сайта. надо собирать с него информацию (картинки, текст). Использую PHP Simple HTML DOM. Вопрос в следующем. Почему не выводиться 2?

1. Что показывает такой код?
$data=@file_get_contents("https://casa.com.tr/lipari-585");
if (preg_match("|\S+\s+(\d+)|",$http_response_header[0],$m)) $error_code=intval($m[1],10); else $error_code=false;
$datalen=strlen($data);
echo "result=$error_code datalen=$datalen\n";

У меня например просто пишет 404 и нет данных
2. делайте очередь закачки отдельно от парсера. парсер должен только ставить задачи на закачку. Если не качается то проблемы авторизации и повторных отложенных попыток закачек не задача парсера. Так же как и распаралеливание запросов
  можно curl-ом сделать
примерно так:
    $urls=[ 'url1','url2','url3' ];
    $chs=[];
    foreach($urls as $url) {
        $ch=$curl_init(); $chs[]=$ch;
        curl_setopt($ch, CURLOPT_URL, 'url1');
        curl_setopt($ch, CURLOPT_HEADER, 0);
    }

    $mh = curl_multi_init();
    foreach($chs as $ch) curl_multi_add_handle($mh,$ch);
    $active = null;
    do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    while ($active && $mrc == CURLM_OK) {
        if (curl_multi_select($mh) == -1) usleep(1000);
        do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }    
    foreach($chs as $ch) curl_multi_remove_handle($mh,$ch);
    curl_multi_close($mh);

Плюс можно мониторить что идёт в очереди. Мокать, хукать и патчить и отлаживать отдельные участки без необходимости перекачивать 100500 файлов.
3. кэшируйте данные (будут быстрее и можно поотлаживаться на трупах) и выяснить что происходило.
4. проверяйте и логируйте ошибки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.