[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Парсер + бинарный вид
DedMorozzz
Подскажите пожалуйста, как представить в строковом формате бинарные данные иль как получить сразу строковые.
Дело в следующем - парсю сайт, выдаёт всё норм, то что надо. Но регулярка ничего не ловит. Тогда взял исходный код страницы, выбрал нужный кусок(почти всё выбрал), сохранил в переменую и проверил регулярку - всё вышло так как и должно быть! Но при этом на сайте - никак. Причём обычный курл - норм, а мультикурл - никак.
Далее сохранил курл_екзек в файл, там всё в бинарном виде, хотя в браузере в нормальном.
Как привести полученные данные в нормальный вид?



Спустя 19 минут, 8 секунд (18.06.2010 - 13:57) DedMorozzz написал(а):
Решил проблему так:
вместо "curl_multi_exec" сделал цикл, в кол-во итераций и внутри них делал "curl_exec". Ибо мультикурл всегда выдаёт бинарник.

Спустя 1 час, 35 минут (18.06.2010 - 15:32) Lolik написал(а):
Сам спросил и сам решил biggrin.gif [glow=]Молодца! [/glow]
Скрытый текст
так держать!

Спустя 13 минут, 8 секунд (18.06.2010 - 15:45) Nikitian написал(а):
Покажите как получали бинарные данные. Есть подозрения, но хочу увидеть сперва.

Спустя 20 минут, 32 секунды (18.06.2010 - 16:06) DedMorozzz написал(а):
do 
{
$m_curl_result=curl_multi_exec($mh,$threads);
preg_match_all("#(Expiration Date|paid-till): *[тут символ форум "обработал"]*([0-9A-z\.\- ]+)#", $m_curl_result, $matches1);
$matches1[2][0]=explode(".",$matches1[2][0]);
$matches1[2][0]=implode("-",$matches1[2][0]);
echo "Expiration Date: ".$matches1[2][0]."<br>";
}
while ($threads > 0);

Если включить отображение на экране - то всё верно показывает. Сохраняя в файл/переменую - бинарник.

Спустя 42 минуты, 36 секунд (18.06.2010 - 16:48) Nikitian написал(а):
Цитата
Если включить отображение на экране - то всё верно показывает

curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1) ставили?
Что-то привели не весь код. Сравниваю визуально с
этим
<?php
// create both cURL resources
$ch1 = curl_init();
$ch2 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

//create the multiple cURL handle
$mh = curl_multi_init();

//add the two handles
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$active = null;
//execute the handles
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}


//close the handles
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

?>
и вижу другой подход. С мультикурлом работал давно, когда он ещё не документирован был, а после не сталкивался. Сейчас с интересом читаю документацию smile.gif) Может ваш код и правильный, а я туплю...

Спустя 9 минут, 42 секунды (18.06.2010 - 16:58) DedMorozzz написал(а):
Цитата
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1) ставили?
это и есть отключить smile.gif На экран отображается лишь тогда, когда 0. Ибо мне не нужен весь контент, нужна лишь дата регистрации домена и время истекания срока.
А код то верный, хотя бы исходя из того, что я получаю результат который нужен, иначе я бы не получил ничего. Только вот сохранить не могу в текстовом виде. Скорее всего есть некая ф-я, которая мульти_екзек делает в разных представлениях, но оной я не нашёл. Сейчас сделал без мультикурла так:
без мульти курла
error_reporting(0);
if(isset($_POST['domain'])){
$a = explode("\r\n", $_POST['domain']);

$ch = array();

for($i = 0; $i < count($a); $i++)
{
$ch[$i] = curl_init();
curl_setopt($ch[$i], CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3");
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch[$i], CURLOPT_URL, "http://who.is/whois/".$a[$i]."/");

$result = curl_exec($ch[$i]);

echo "<b>".$a[$i]."</b>:<br>";
preg_match_all("#(Expiration Date|paid-till): *[&nbsp;]*([0-9A-z\.\- ]+)#", $result, $matches1);
if(isset($matches1[2][0])){
$matches1[2][0] = explode(".", $matches1[2][0]);
$matches1[2][0] = implode("-", $matches1[2][0]);
echo "Expiration Date: ".$matches1[2][0]."<br>";
}
else echo "This domain is not registered";
if(isset($matches1[2][0])){
preg_match_all("#(Creation Date|created): *[&nbsp;]*([0-9A-z\.\- ]+)#", $result, $matches2);
$matches2[2][0] = explode(".", $matches2[2][0]);
$matches2[2][0] = implode("-", $matches2[2][0]);
echo "Creation Date: ".$matches2[2][0]."<br><br>";
}
}

}

Всё работает, но долго...


_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.