Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проверка существования сайта! 
:(
    Опции темы
$дмитрий
Дата 13.11.2004, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 17
Всего: 45



интересно, как еще это можно сделать? пока делаю так, и вроде все работает:

Код

<?

$link = "http://www.ya.ru/";
$file = @fopen($link, "r");
if( @fread($file, 99999999)) echo 'yes'; else echo 'no';

?>

PM MAIL   Вверх
penizillin
Дата 13.11.2004, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 10.11.2004

Репутация: 8
Всего: 9



можно http-хедер читать, он размером меньше, и инфу дает (200, 404 или еще чего).
и анализировать соответственно.
PM MAIL ICQ   Вверх
Black
Дата 13.11.2004, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 7
Всего: 45



Цитата(penizillin @ 13.11.2004, 20:26)
можно http-хедер читать, он размером меньше, и инфу дает (200, 404 или еще чего).
и анализировать соответственно.

ну тогда надо использовать сокеты...


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Mal Hack
Дата 13.11.2004, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



По сути это работать не может без включения директив конфигурации PHP...
Вообще хост на существование можно проверить так:
1. С помощью system(): выполнить ping и проработать результат.
2. Воспользоваться gethostbyname(); либо вернет IP, либо пустую строку.
Добавлено @ 20:37
Сокеты тоже можно использовать, но вариант не самый надежный..
PM ICQ   Вверх
Opik
Дата 13.11.2004, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



PHP-DIRECTOR
не обязательно сокеты, можно и curl, удобнее...
PM MAIL Skype   Вверх
$дмитрий
Дата 13.11.2004, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 17
Всего: 45



всем спасибо! попробую все варианты!
PM MAIL   Вверх
Alx
Дата 12.7.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



Цитата(Mal Hack @  13.11.2004,  20:36 Найти цитируемый пост)
2. Воспользоваться gethostbyname(); либо вернет IP, либо пустую строку. 

я пробывал gethostbyaddr(), если он не находит IP, то подвисает на несколько секунд. совсем не мило.

Добавлено через 12 минут и 37 секунд
ping тоже работает очень медленно..(

Добавлено через 13 минут и 26 секунд
а как читать header через curl?


--------------------
PM MAIL WWW ICQ   Вверх
Alx
Дата 12.7.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



у меня есть список IP-серверов, мне нужно поочереди проверить их и отправить запрос на первый рабочий..


--------------------
PM MAIL WWW ICQ   Вверх
mishaSL
Дата 12.7.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Вот функция через которую я проверяю существование домена:
Код

function checkDomen($domen)
{
    $host = gethostbyname($domen);
    $ip = ip2long($host);
    if ($ip === -1 || $ip === false) {
        return false;
    }
    return true;
}


работает достаточно быстро 100 доменов проверяет ~3 секунд. Для проверки сделал так:
Код

<?php
function microTimes()
{
    list($msec, $sec) = explode(chr(32), microtime());
    return ($sec+$msec);
}
define('TIME_START', microTimes());
function checkDomen($domen)
{
    $host = gethostbyname($domen);
    $ip = ip2long($host);
    if ($ip === -1 || $ip === false) {
        return false;
    }
    return true;
}

for($i=0;$i<100;$i++) {
checkDomen('www.test'.mt_rand().'.ru');
}

echo "Выполнено за ".round(microTimes()-TIME_START, 6)." сек.\n";
?>




Alx, поверь не через cURL не через сокеты быстрее не будет.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Golda
Дата 12.7.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 20
Всего: 42



если нужен curl, то, чтобы получить только заголовки, используйте

curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
Levsha
Дата 12.7.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 30.9.2005

Репутация: нет
Всего: 4



Как альтернатива, можно пробивать через хуиз


--------------------
PM   Вверх
Alx
Дата 16.7.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



mishaSL, 
спасибо, а как сделать, чтобы не по dns, а по ip тестить?


--------------------
PM MAIL WWW ICQ   Вверх
Alx
Дата 17.7.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



mishaSL, 
функция ip2long ведь только проверяет правильно ли сформирован ip.. но она не тестит его на доступность..

Добавлено через 8 минут и 39 секунд
Golda, curl тоже работает только с DNS.. а мне бы IP...


--------------------
PM MAIL WWW ICQ   Вверх
mishaSL
Дата 17.7.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(Alx @  16.7.2007,  22:25 Найти цитируемый пост)
спасибо, а как сделать, чтобы не по dns, а по ip тестить?


Цитата(Alx @  17.7.2007,  11:14 Найти цитируемый пост)
функция ip2long ведь только проверяет правильно ли сформирован ip.. но она не тестит его на доступность..


Alx, что-то я вас немного не понял. По какому IP вы хотите проверять?
В моем примере мы получаем IP адрес интернет хоста(gethostbyname()). Если IP получить не удалось, значит хост неправильный. smile

Добавлено через 3 минуты и 4 секунды
А вот как проверять DNS записи, то пример можно посмотреть здесь



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Alx
Дата 17.7.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



виноват, с IP тоже работает.. но у меня подвисает когда нерабочий IP..
Код

function checkIP($host)
{   $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$host);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_NOBODY, 1); 
    curl_exec($ch);
    curl_close($ch);
}

$ips = array('89.178.145.81','80.86.84.99');

checkIP($ips[1]); // существует, выводит
flush();
checkIP($ips[0]); // не существует, зависает

http://alx.vingrad.ru/alx/research/tourbaza/server.php

Добавлено @ 11:44
mishaSL, 
Цитата(Alx @  12.7.2007,  11:26 Найти цитируемый пост)
у меня есть список IP серверов, мне нужно поочереди проверить их и отправить запрос на первый рабочий.. 

у них может не быть DNS...


Это сообщение отредактировал(а) Alx - 17.7.2007, 11:46


--------------------
PM MAIL WWW ICQ   Вверх
mishaSL
Дата 17.7.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(Alx @  17.7.2007,  11:43 Найти цитируемый пост)
виноват, с IP тоже работает.. но у меня подвисает когда нерабочий IP..

Сделайте таймаут:
Код

function checkIP($host)
{   $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$host);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_NOBODY, 1); 
    curl_setopt($cUrl, CURLOPT_TIMEOUT, 4);
    curl_exec($ch);
    curl_close($ch);
}




--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
mishaSL
Дата 17.7.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Также можете попробовать так (писал только что и торопясь, но вроде работает быстрее):
Код

function checkIP($ip) {
    $ipL = ip2long($ip);
    if ($ipL === -1 || $ipL === false) {
        return false;
    }    
    $hostname = gethostbyaddr($ip);
    $ipH = ip2long($hostname);
    if ($ipH === -1 || $ipH === false) {
        return true;
    }    
    return false;
}

$ips = array('89.178.145.81','80.86.84.99','77.77.77.77','asdasdasdasd');

foreach($ips as $v) {
    var_dump(checkIP($v));
}




--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Alx
Дата 17.7.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



mishaSL, 
спасибо за желание помочь, только сейчас checkIP('89.178.145.81') возвращает true..
хотя я сейчас под этим айпи с dialup`а зашел... http://89.178.145.81 - 404-ая..

Добавлено через 1 минуту и 59 секунд
и для 83.237.144.228..(


--------------------
PM MAIL WWW ICQ   Вверх
GZep
Дата 17.7.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



mishaSL, по моему ты что то напутал там c return в своей функции.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
mishaSL
Дата 17.7.2007, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(Alx @  17.7.2007,  12:25 Найти цитируемый пост)
спасибо за желание помочь, только сейчас checkIP('89.178.145.81') возвращает true..
хотя я сейчас под этим айпи с dialup`а зашел... http://89.178.145.81 - 404-ая..

Либо я перестал вас понимать. Либо вы не понимаете что хотите сделать. Опишите пожалуйста задачу еще раз подробнее.
То что вы зашли под этим IP с dialup`а и этот IP не открывается через http протокол - это вполне логично, да и хост этого IP (89-178-145-81.broadband.corbina.ru) тоже не должен открываться через HTTP. Это правильно. 
Расскажите подробнее что вы хотите проверить по IP?

Добавлено через 1 минуту и 5 секунд
Цитата(GZep @  17.7.2007,  12:38 Найти цитируемый пост)
mishaSL, по моему ты что то напутал там c return в своей функции. 

Не исключено, но вроде все правильно. Что именно напутал?


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Alx
Дата 17.7.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



mishaSL,
ок тогда сначала smile
есть веб-интерфейс. в общем-то большая веб-форма. когда юезр нажимает submit или "начать поиск" запрос формы должен отправится db.exe, написанному на delphi. последнее меня не касается, мне лишь надо отправить запрос. db.exe будет лежать на нескольких серверах с разным IP, чтобы исключить возможность недоступности сервера. есть список ip этих серверов в txt-файле, который формирует заказчик. я читаю его функцией file() и проверяю поочереди IP, не висит ли сервер. если нет, я должен отправить на этот сервер файлу db.exe запрос и выйти из цикла.
фактически - выбрать первый рабочий сервер...


--------------------
PM MAIL WWW ICQ   Вверх
mishaSL
Дата 17.7.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(Alx @  17.7.2007,  13:05 Найти цитируемый пост)
мне лишь надо отправить запрос. db.exe будет лежать на нескольких серверах с разным IP

Ок, теперь понятнее. Так вот, как вы будете отправлять запрос, т.е. через какой порт? 
Если 80 и запрос будет отправляться по http протоколу, то можете проверять либо через функцию которую я вам дал, но лучше через curl (там можете указать явно порт) и задать небольшой timeout.

P.S. А то что вы сейчас проверяли IP по которому подключены к интернету, то этот IP существует и доступен, просто 80 порт на сервере закрыт и все.



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Alx
Дата 17.7.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



спасибо, порт 80 скорее всего.. а curl в любом случае лучше использовать или только если порт не 80?


--------------------
PM MAIL WWW ICQ   Вверх
mishaSL
Дата 17.7.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(Alx @  17.7.2007,  15:22 Найти цитируемый пост)
спасибо, порт 80 скорее всего.. а curl в любом случае лучше использовать или только если порт не 80? 


Смотря как запрос будет посылаться. Через curl или через что?

В моем примере функции checkIP я предполагал, что возможно некоторые IP вообще не будут существовать и соответственно их надо проверить. Но у тебя будет список с серверами, где заранее известно что такие существуют. Нужно только проверить доступен ли он в данный момент. Решение: подключаешься через curl - если подключился и ответ тот что надо, посылаешь через это подключение запрос. Если же не получилось -  пытаешься подключиться к следующему.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Alx
Дата 17.7.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



mishaSL, 
а как послать запрос через curl?


--------------------
PM MAIL WWW ICQ   Вверх
mishaSL
Дата 17.7.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(Alx @  17.7.2007,  17:27 Найти цитируемый пост)
mishaSL, 
а как послать запрос через curl?

Это зависит от конкретной ситуации. 
К примеру самый простой имхо способ - это GET методом отправляешь запрос. Получаешь от db.exe (твоего файла на делфи или какого-то другого) ответ в виде XML-файла (формат XML файла согласуй заранее, с тем кто пишет приложение на делфи). И уже собственно парсишь этот XML файл и выводишь результат.
Как получить удаленный файл с помощью curl я описывал здесь, в этой функции сразу есть проверка чтобы сервер давал отклик 200.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Alx
Дата 18.7.2007, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



cпасибо


--------------------
PM MAIL WWW ICQ   Вверх
Alx
Дата 18.7.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 6
Всего: 78



сделал так:

Код

<?php

$ips = file('iplist.txt');

foreach($ips as $v)
{   $v = trim($v);
    if(checkIP($v))
    {   sendReq($v);
        break;
    }
}

function checkIP($ip)
{   $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $ip);
      curl_setopt($ch, CURLOPT_HEADER, 1);
      curl_setopt($ch, CURLOPT_NOBODY, 1); 
      curl_setopt($ch, CURLOPT_TIMEOUT, 4);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $headers = curl_exec($ch);
      curl_close($ch);

    if(strstr($headers,"HTTP")) $c = substr($headers,9,3);
    return $c == "200";
}

function sendReq($ip)
{   $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://{$ip}:1500");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
    curl_exec($ch);
    curl_close($ch);
}

?>


всем спасибо!)


--------------------
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0778 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.