Дело в следующем - парсю сайт, выдаёт всё норм, то что надо. Но регулярка ничего не ловит. Тогда взял исходный код страницы, выбрал нужный кусок(почти всё выбрал), сохранил в переменую и проверил регулярку - всё вышло так как и должно быть! Но при этом на сайте - никак. Причём обычный курл - норм, а мультикурл - никак.
Далее сохранил курл_екзек в файл, там всё в бинарном виде, хотя в браузере в нормальном.
Как привести полученные данные в нормальный вид?
Спустя 19 минут, 8 секунд (18.06.2010 - 13:57) DedMorozzz написал(а):
Решил проблему так:
вместо "curl_multi_exec" сделал цикл, в кол-во итераций и внутри них делал "curl_exec". Ибо мультикурл всегда выдаёт бинарник.
вместо "curl_multi_exec" сделал цикл, в кол-во итераций и внутри них делал "curl_exec". Ибо мультикурл всегда выдаёт бинарник.
Спустя 1 час, 35 минут (18.06.2010 - 15:32) Lolik написал(а):
Сам спросил и сам решил
[glow=]Молодца! [/glow]
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
Скрытый текст |
так держать! |
Спустя 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](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 9 минут, 42 секунды (18.06.2010 - 16:58) DedMorozzz написал(а):
Цитата |
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1) ставили? |
это и есть отключить
На экран отображается лишь тогда, когда 0. Ибо мне не нужен весь контент, нужна лишь дата регистрации домена и время истекания срока.
А код то верный, хотя бы исходя из того, что я получаю результат который нужен, иначе я бы не получил ничего. Только вот сохранить не могу в текстовом виде. Скорее всего есть некая ф-я, которая мульти_екзек делает в разных представлениях, но оной я не нашёл. Сейчас сделал без мультикурла так:
Всё работает, но долго...
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
А код то верный, хотя бы исходя из того, что я получаю результат который нужен, иначе я бы не получил ничего. Только вот сохранить не могу в текстовом виде. Скорее всего есть некая ф-я, которая мульти_екзек делает в разных представлениях, но оной я не нашёл. Сейчас сделал без мультикурла так:
без мульти курла
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): *[ ]*([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): *[ ]*([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>";
}
}
}
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): *[ ]*([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): *[ ]*([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 это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться