Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Не парсится страница


Автор: systemIV 10.10.2011, 01:06
Ребят, прошу помощи.
Предназначение парсера - тырить трэк, который сейчас играет на европе+.
На локалхосте всё работает как часы.
Как заливаю на хостинг, ничего не работает.
Начал тестить, оказывается сама страница не попадает в переменную:
Код

$data = curl_exec($ch);

Пробовал вот такие подходы: file_get_contents, curl, sockets
Все работают на локальном хосте, но не работают на хостинге.
Проверил на нескольких хостингах, результат везде один.
Вызывал phpinfo() на хостинге, курл работает.

Автор: systemIV 10.10.2011, 01:23
Страница формируется через JSON

Автор: $дмитрий 10.10.2011, 04:33
Проблема в скрипте

Автор: systemIV 10.10.2011, 11:49
В каком?

Автор: patap 10.10.2011, 13:05
че будет?
Код

echo curl_error($ch);

Автор: systemIV 10.10.2011, 13:13
Цитата(patap @  10.10.2011,  13:05 Найти цитируемый пост)
че будет?

Ничего.
Вот посмотрите код:
Код

<?php

$ch = curl_init('http://www.europaplus.ru/index.php?go=Content&id=345');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);

preg_match('/<div class="play-info">.*?<b>(.*?)<\/b>.*?<i>(.*?)<\/i>.*?<p>/is', $data, $name);

echo '<?xml version="1.0" encoding="utf-8" ?><track>' . $name[1] . ' -> ' . $name[2] .'</track>';
?>

На локалхосте работает,на хостинге нет.

Автор: $дмитрий 10.10.2011, 15:52
А этот пример работает?
Код

<?php
function urlContent($sURL)
{
    $arURL = parse_url($sURL);
    $sQuery = $arURL['path'];
    if($arURL['query']){
        $sQuery .= '?'.$arURL['query'];
    }
    if(!$sQuery){
        $sQuery = '/';
    }
    if(!($socket = fsockopen($arURL['host'], 80, $eCode, $eText, 5))){
        return false;
    }
    $content = '';
    $headers  = "GET ".$sQuery." HTTP/1.0\r\n"
    ."Host: ".$arURL['host']."\r\n"
    ."Referer: ".$arURL['scheme']."://".$arURL['host']."\r\n"
    ."User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.6) Gecko/2009011913 MRA 5.3 (build 02557) Firefox/3.0.6\r\n"
    ."Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    ."Accept-Language: ru,en-us;q=0.7,en;q=0.3\r\n"
    ."Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n"
    ."\r\n";
    fputs($socket, $headers);
    while(!feof($socket))
    {
        $content .= fgets($socket, 128);
    }
    fclose($socket);
    return preg_replace("#.*?(\x0D\x0A){2}(.*)#sm", "$2", $content);
}

$data = urlContent('http://www.europaplus.ru/index.php?go=Content&id=345');
preg_match('/<div class="play-info">.*?<b>(.*?)<\/b>.*?<i>(.*?)<\/i>.*?<p>/is', $data, $name);
echo '<?xml version="1.0" encoding="utf-8" ?><track>' . $name[1] . ' -> ' . $name[2] .'</track>';
?>

Автор: systemIV 10.10.2011, 16:01
На локалке да, на хостинге нет

Автор: $дмитрий 10.10.2011, 16:31
Обязательно включи вывод ошибок
Код

error_reporting(2047);
ini_set('display_errors', 1);

Вообще что-нибудь выводится? Добавь в скрипт echo 1;
Затем в моем примере выведи переменную $content

Кстати проблема может быть не скрипте а в окружении, возможно:
- htaccess глушит скрипт
- europaplus.ru заблокировал IP
- Некорректная настройка php и тд и тп
- Кривые настройки маршрутизации на сервере

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)