Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Ping средствами php, Как реализовать ping на php?
lucius  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 14
Пользователь №: 4586
На форуме: 9 лет, 2 месяца, 4 дня
Карма:




Задача:
Со своего ресурса пинговать любой другой ресурс (ну например, www.ya.ru) и выводить результаты этого пинга. Можно и не пинговать, но надо узнать скорость ответа данного ресурса. Причем, не обязательно, чтобы это был веб-сервер. Это может быть и ftp. То есть надо иметь возможность стучаться к любому общедоступному сервису данного сервера.
Условие:
"Свой" ресурс расположен на бесплатном хостинге, который не разрешает таких бесхитростных действий, как system("ping -c $count -w $count $host"). Также хостинг не позволяет передавать функции fopen() URL в качестве параметра. Создавать сокеты он тоже не дает.
Мое решение:
На текущий момент я догадался лишь о том, как проверить скорость ответа вебсервера. Сделал я это примерно так:
Код
$time_start = microtime(1);
include('http://213.180.204.1/abirvalg.html');
$time_end = microtime(1);
$time = $time_end - $time_start;
echo "ответ получен за $time секунд\n";


Жду ваших идей по этому поводу)



Спустя 24 минуты, 41 секунда (20.03.2008 - 19:36) vasa_c написал(а):
И вы это проверяли?
Меня грызут смутные сомнения, что если уж "http://" отключен, то отключен повсеместно, а не только для fopen()

Спустя 26 минут, 8 секунд (20.03.2008 - 20:02) Sylex написал(а):
Цитата(lucius @ 20.3.2008, 22:11) [snapback]35362[/snapback]
Задача:
Со своего ресурса пинговать любой другой ресурс (ну например, www.ya.ru) и выводить результаты этого пинга. Можно и не пинговать, но надо узнать скорость ответа данного ресурса. Причем, не обязательно, чтобы это был веб-сервер. Это может быть и ftp. То есть надо иметь возможность стучаться к любому общедоступному сервису данного сервера.
Условие:
"Свой" ресурс расположен на бесплатном хостинге, который не разрешает таких бесхитростных действий, как system("ping -c $count -w $count $host"). Также хостинг не позволяет передавать функции fopen() URL в качестве параметра. Создавать сокеты он тоже не дает.
Мое решение:
На текущий момент я догадался лишь о том, как проверить скорость ответа вебсервера. Сделал я это примерно так:
Код
$time_start = microtime(1);
include('http://213.180.204.1/abirvalg.html');
$time_end = microtime(1);
$time = $time_end - $time_start;
echo "ответ получен за $time секунд\n";


Жду ваших идей по этому поводу)


Код
<?php
exec( "ping ya.ru", $res);
print_r($res);
?>

Спустя 4 минуты, 13 секунд (20.03.2008 - 20:06) Sylex написал(а):

Спустя 7 минут, 29 секунд (20.03.2008 - 20:14) lucius написал(а):
Цитата(vasa_c @ 20.3.2008, 19:36) [snapback]35363[/snapback]
И вы это проверяли?
Меня грызут смутные сомнения, что если уж "http://" отключен, то отключен повсеместно, а не только для fopen()


Да. Проверял. Вот результаты тестирования:
http://lucius.bos.ru/test_fopen.php
http://lucius.bos.ru/knocker.php

Спустя 13 минут, 32 секунды (20.03.2008 - 20:27) disc написал(а):
В первом посте код проверки пинга просто Адцкий smile.gif

Спустя 2 минуты, 48 секунд (20.03.2008 - 20:30) lucius написал(а):
Цитата(Sylex @ 20.3.2008, 20:06) [snapback]35365[/snapback]


повторюсь, что хостер не дает запускать системную утилиту ping из скрипта. А в приведенной Вами ссылке класс Net_Ping реализует пинг через все тот же exec. Просто это оформлено более красиво.

Спустя 2 минуты, 52 секунды (20.03.2008 - 20:33) lucius написал(а):
Цитата(disc @ 20.3.2008, 20:27) [snapback]35368[/snapback]
В первом посте код проверки пинга просто Адцкий smile.gif

но ведь работает жа wink.gif

Спустя 3 минуты, 7 секунд (20.03.2008 - 20:36) Sylex написал(а):
Цитата(lucius @ 20.3.2008, 23:30) [snapback]35369[/snapback]
Цитата(Sylex @ 20.3.2008, 20:06) [snapback]35365[/snapback]


повторюсь, что хостер не дает запускать системную утилиту ping из скрипта. А в приведенной Вами ссылке класс Net_Ping реализует пинг через все тот же exec. Просто это оформлено более красиво.


Ну тогда вам не повезло...

Создайте на другом хосте: через GET-запрос передается хост, и возвращается ответ, а вы грабите через file_get_contents:) Иль тож нельзя?

Спустя 5 минут, 41 секунда (20.03.2008 - 20:42) lucius написал(а):
Цитата(Sylex @ 20.3.2008, 20:36) [snapback]35371[/snapback]
Ну тогда вам не повезло...

Создайте на другом хосте: через GET-запрос передается хост, и возвращается ответ, а вы грабите через file_get_contents:) Иль тож нельзя?


тоже нельзя. Но уже по другой причине. Мне надо пинговать именно оттуда, где страничка моя висит. Другими словами, подразумевается, что я регистрируюсь на нескольких бесплатных хостингах, размещаю там такой скрипт и пингую нужный мне хост из разных мест.

Спустя 5 минут, 28 секунд (20.03.2008 - 20:47) Sylex написал(а):
lucius, есть недорогой хостинг... от 1,5$ в месяц... В чем проблема? Я правда не знаю что вам предложить... вы опишите лучше подробней, что вы хотите сделать?

Спустя 27 минут, 56 секунд (20.03.2008 - 21:15) lucius написал(а):
Цитата(Sylex @ 20.3.2008, 20:47) [snapback]35373[/snapback]
lucius, есть недорогой хостинг... от 1,5$ в месяц... В чем проблема? Я правда не знаю что вам предложить... вы опишите лучше подробней, что вы хотите сделать?


на самом деле, я понимаю, что платным хостингом эти проблемы могут быть решены. Но опять же я не уверен, что именно так и будет. Ведь все эти запреты установлены на уровне настроек сервера. То есть в любом случае надо проверять.
К тому же я выбрал именно вариант с бесплатным хостингом потому, что таких "точек сканирования", то есть страничек на разных хостингах/серверах, с которых будет проводиться пинг, будет много. Пусть даже их будет 20. тогда плата за хостинг уже возрастает до 30$. А если их еще больше понадобится?!..
Вроде, я уже достаточно полно описал то, что мне именно надо. Нужно создать эдакую виртуальную сеть, позволяющую оценить разницу в отклике ресурса на запросы из разных уголков планеты.

Спустя 12 часов, 2 минуты, 37 секунд (21.03.2008 - 09:18) vasa_c написал(а):
Что-то вы нехорошее делаете на бесплатных серверах...

Спустя 3 часа, 46 минут, 56 секунд (21.03.2008 - 13:05) LoneCat написал(а):
Согласен с вышеотписавшимся vasa_c.

Спустя 5 дней, 8 часов, 17 секунд (26.03.2008 - 21:05) Vaska написал(а):
Цитата(lucius @ 20.3.2008, 20:14) [snapback]35367[/snapback]
Цитата(vasa_c @ 20.3.2008, 19:36) [snapback]35363[/snapback]
И вы это проверяли?
Меня грызут смутные сомнения, что если уж "http://" отключен, то отключен повсеместно, а не только для fopen()


Да. Проверял. Вот результаты тестирования:
http://lucius.bos.ru/test_fopen.php
http://lucius.bos.ru/knocker.php

Первая ссыль выдает ошибку, вторая не работает, просто потому что ответ был 5 сек, и выдан ответ был менее чем за 1 секунду, проверял свой хост.

Спустя 1 день, 18 часов, 17 минут, 2 секунды (28.03.2008 - 15:22) lucius написал(а):
Всем спасибо. Окончательно разочаровавшись в подобной идее, оставил ее и стал искать хостинг позволяющий работать с сокетами.
Среди бесплатных это почти нереально оказалось. Так что пользуюсь платным.
Но теперь возник другой вопрос. Но так как он выходит за рамки данной темы, я завел новую

Спустя 2 года, 4 месяца, 12 дней, 22 часа, 56 минут, 22 секунды (11.08.2010 - 13:19) Пупкин написал(а):
Как отпинговать IP-адрес например: или PHP, или Java Script или какой либо трансяцией. Мне нужно получить по удалённому IP (которые я знаю) лишь TRUE, этого мне будет вполне доастаточно. У меня тоже закрыты: system....exec.
Нужна идя в 1строчку! Типа:

$ping = $_SERVER['X_FORWARDING_FOR'] ;
echo ($ping);

Какие функции мона применить, что бы получить по REMOTE_ADDR == TRUE?

Спустя 23 часа, 5 минут, 49 секунд (12.08.2010 - 12:24) Dron19 написал(а):
Цитата (Sylex @ 20.03.2008 - 17:02)
<?[SPAN=darling]php[/SPAN]<br />exec( "ping ya.ru", $res);<br />print_r($res); <br />?>

а можете рассказать своими словами, что делает функция exec? А то читал про нее на php.su и ничего не понял =(

Спустя 56 минут, 6 секунд (12.08.2010 - 13:20) Guest написал(а):
exec вызывает в оболочке php командную строку, типа: С:_ (моргающий маркер)

Спустя 5 минут, 8 секунд (12.08.2010 - 13:26) Guest написал(а):
Для пехи: exec( "ping ya.ru", $res)
ИЛИ
Для Windы: С:\>ping ya.ru

Где в $res - записывается полученное значение
Но, писать так правильнее, использовать ключ -3 (попыток), т.е. "ping -n -3 ya.ru"
иначе пинг бесконечный будет и ты свой сервак "повесишь"

А вот чем system от exec отличается? А?

И как действовать в том случае, если ОНИ ВЫКЛЮЧЕНЫ - в попу палец... Я уже всё перерыл - на иностранныйх сайтах полно идей, а на нашем php - одна тупость!
Подскажите, как действовать если они (exec и пр) выключены????????

Спустя 5 минут, 2 секунды (12.08.2010 - 13:31) Guest написал(а):
Нужен "миксовый" пинг, с выключеными функциями (fopen, get_flile_info, exec, system - выключены по соображ. безопасности) Пров: mastehost!
Пинговать надо IP. Как это сделать в одну две строчки???
Какие альтернативы есть в замен этим функциям, что бы получить в итоге через if true||false?????????????????? Не хочу с CGI связываться, хочу на PHP родном!
Слёзно перелистываю весь справочник по php в поисках замены.
Видемо, это НИКОМУ НЕ ИНТЕРЕСНО.

Спустя 7 минут, 32 секунды (12.08.2010 - 13:38) linker написал(а):
system() в отличии от exec() вываливает весь результат на вывод.

Спустя 48 минут, 36 секунд (12.08.2010 - 14:27) Guest написал(а):
Мммммм... понятно дядя wink.gif
Но у меня ни тот ни другой мёртвые.
Как мне хочеться TRUE получить, так не хочется страницу с html загружать полностью. А ежели у меня 200 IP адресов или 1000 во трафику будет! biggrin.gif

Спустя 7 минут, 47 секунд (12.08.2010 - 14:35) Guest написал(а):
Ну неужели нет функций-заменителей, шобы аля ping сделать или детект какой-нить. На сокетах писать - у меня мозги вянут, порты какието х поймёшь чего к чему, текста на пол страницы - и один хрен не работает fsocks_open! Ррррррррр!
Ну php такая мила и чудная весч, :cry а пинг не могу сделать уже 2 день библию перечитываю в поисках и пробах. Видемо Русским людям это ничего не нужно, только деньги к рукам побыстрее пригебсти, а высокие технологии - это в Америку, Германию, Израиль - туда ехать надо ph34r.gif

Спустя 3 минуты, 29 секунд (12.08.2010 - 14:38) linker написал(а):
Когда очень сильно нужна база данных, а бесплатный хостер ее не предоставляет, то обычно меняют хостера на платного. Если тебе жалко денег, то смысла ехать в Америку, Германию, Израиль нету.

Спустя 29 минут, 55 секунд (12.08.2010 - 15:08) Guest написал(а):
У меня всё супер-пупер платное: SQL+PHP+VS+IP's...всякого г.
И exec - закрыты по безопасности (ибо "срут" много со сканами портов и прочим)!
Мне нужна одна единственная функция, которая выдаёт TRUE||FALSE после "реакции" по указанному IP! ТУт видать ламеры все собрались. biggrin.gif
Вот я и рву на своей лысине волосы - мало инфы по этому вопросу, как обойти без ASP, C#, VB, AJAX... на PHP - уверен что можно, но какая функция!

Спустя 1 минута, 28 секунд (12.08.2010 - 15:09) Guest написал(а):
masterhost млин!

Спустя 5 минут, 28 секунд (12.08.2010 - 15:15) linker написал(а):
Значит зря отдал деньги хостеру.

Спустя 11 минут, 45 секунд (12.08.2010 - 15:27) Guest написал(а):
Гы, да я и включить могу: ssh login password root l p sa mc up up up up up up up httpdconf-tags on и php.ini-меняем строчки на exec="ON" и всё будет. init ]6 шутка biggrin.gif exit exit exit exit exit
Но всё-таки вопрос актуален!

Спустя 3 минуты, 40 секунд (12.08.2010 - 15:30) linker написал(а):
pcntl_exec() но кроме Windows.

Спустя 7 минут, 2 секунды (12.08.2010 - 15:37) Guest написал(а):
Ша попробую, спс!

Спустя 9 минут, 44 секунды (12.08.2010 - 15:47) Guest написал(а):
Падает пЫха:
1)
$ip = "http://www.sex.ru/index.php";
pcntl_exec($ip, $arg);
print $arg; // Ждал Array[]
echo ("Я не умерла");

2) Упала:
$jopafusck = pcntl_exec($ip, $arg);
print $jopafusck; // Ожидал TRUE от функции!
echo ("Я всётаки умерла");

3) Функция НЕ работает:
// pcntl_exec($ip, $arg); // Закоментарил иё нафиг
print $arg;
echo ("Я вымерла");

Она, значит в этой библиотеке php - тоже выключена,
т.е. всё что _EXECообразное - не будет работать!

Спустя 5 минут, 24 секунды (12.08.2010 - 15:52) Guest написал(а):
Х, Иносранцы на PHP даже string calculhmac ( string $clent , string $data ) пакет для обработки кредитных карточег ставят из пакета SSPLUS! Во как. Юзаю иностранны мануал тут: http://ru2.php.net/manual/en/funcref.php
рулет.
А http://www.php.su/functions/?mysqli-ping
полное ггггг....

Спустя 11 минут, 18 секунд (12.08.2010 - 16:04) linker написал(а):
pcntl_exec('ping');

Спустя 8 минут, 53 секунды (12.08.2010 - 16:13) Guest написал(а):
void pcntl_exec ( string $path [, array $args [, array $envs ]] )

Из ихнего примера:
switch (pcntl_fork()) {
case 0:
$cmd = "/path/to/command";
$args = array("arg1", "arg2");
pcntl_exec($cmd, $args);
// the child will only reach this point on exec failure,
// because execution shifts to the pcntl_exec()ed command
exit(0);
default:
break;
}

Ша, попробую:
$ip = "http://www.cocem.ru/index.php"; // В качестве теста :-)))
ping ($ip); // Упала

Думал ШО скобки:
ping (".$ip."); // Тоже упала

Думал про TRUE:
$fuckingshit = ping($ip);
print $fuckingshit; // Валяется, в баню её

Буду другие пути искать, мы УПЁРТЫЕ!
Но если сделаю - будет супер-пупер пинговая конфетка для дистанционного управления, нашими объектами по всей России!
Предлагайте есчё идеи (НЕЭКЗИКОподобные только)

Спустя 1 минута, 12 секунд (12.08.2010 - 16:14) Guest написал(а):
Блин, меня глючит - я не то попробывал laugh.gif
Ща...

Спустя 43 секунды (12.08.2010 - 16:15) Guest написал(а):
Неа, не работает!

Спустя 10 минут (12.08.2010 - 16:25) Guest написал(а):
$ip = "http://192.168.1.1/index.php";
$fh = fopen($ip,"rb");
print $fh;
if ($fh)
if (!$fh)

Можно так сделать, НО есть минусы:
1) Если есть web-страница с apache - тогда можно запинговать!
2) А если нет страницы, а есть голый IP, тогда всё "висит". Значит, надо print только после условий IF выводить!


Спустя 1 минута, 51 секунда (12.08.2010 - 16:26) Guest написал(а):
3) Минус нашёл: через ssl (https) не читает по-блочно cool.gif

Спустя 2 минуты, 54 секунды (12.08.2010 - 16:29) Guest написал(а):
file_exists - не подходит и is_dir тоже, т.к. они работают тока в root localhost

Спустя 4 минуты, 1 секунда (12.08.2010 - 16:33) Guest написал(а):
Так что ВОТ УЖЕ ОКОЛО РЯДОМ ТУТ НА В И С ВОЗЛЕ там mad.gif
Аналогично что-то. Я проста функции читаю из справочника.

Спустя 2 минуты, 58 секунд (12.08.2010 - 16:36) linker написал(а):
$handle = popen('ping -c 3 <URL>', 'r');
while($result = fread($handle,1024))
{
echo $result;
}
pclose($handle);

Спустя 8 минут, 1 секунда (12.08.2010 - 16:44) Guest написал(а):
Вчера подобрал какую-то функцию, из какого-то стандартного набора, у которой очень много параметров вывода в браузер, причём удалённых сайтов. Она типа парсера, можно в свою страничку - чужую вывести любую. Ты вот, там есть какой-то параметр - который выводит мол: Apache 2.4.5.6.7.8, Фигаче, Хреначе, Версия, Шмерсия - строчечку (там надо в настройках вместо 0 - 1 написать, и она будет не html выводить а инфу о странице - а это "компактнее" и меньше трафа и TRUE мона прикрутить) Этот вариант вчера был ещё ближе, за место fopen - но я сдури взял и убил все коменты свои нафиг сегодня с утра, и ия стёр, а теперь не могу вспомнить что это было! sad.gif там такого типа было, примерно:

$ip = "http://www.cocem.ru/";
cocet_open($fh); // Типа что то открывает
$chlen = cocet_cocala($ip, 1); // Конектицо, где 0-html, 1-system, 2-ещё шото, 3,4,5...
cocet_chlen($chlen); // Выводит в браузер
cocet_close($fh); // Типо закрывает

А что за функция... ХЗ! Уже не помню, бьюсь бошкой об стену, даже примерно не могу вспомнить. Но НЕ socks_open - точно! blink.gif

Спустя 2 минуты, 18 секунд (12.08.2010 - 16:47) Guest написал(а):
linker: Ша испробую твою идею, должно прикольно получиться tongue.gif

Спустя 9 минут, 8 секунд (12.08.2010 - 16:56) Guest написал(а):
НЕ ЧИТАЕТ БЛОКИ - пустое значение возвращает!

echo ("<script>alert('1');</script>");
$handle = fopen('ping -c 3 '.$ip, 'rb');
echo ("<script>alert('2');</script>");
while($result = fread($handle,1024))
{
echo ("<script>alert('3');</script>");
$result .= $result;
}
fclose($handle);

echo ("<script>alert('fuckmaza!');</script>");
print "Выводмля:".$result;

Спустя 9 минут, 28 секунд (12.08.2010 - 17:05) Guest написал(а):
Может мне так попробывать:

<script language="JabaScript">
GetElemetntById.fuck = document.fuck.name;
if ( кароче !NULL) { var fuckPing = "1"}
if ( кароче NULL) { var fuckPing = "0"}
</script>

<?php
$ip = "http://sex.ru/index.php";
echo ("<iframe id=fuck name=".$ip." src=C:///cmd/ping -n 3 ".$ip." width=350 height=200></iframe>");

if ($Ping == "1") echo ("Всё супер, ты круче самого эпштейна нафиг");
if ($Ping != "1") echo ("Произошла жопа, хрен тебе а не пинг");

?>

Можт в iframe bat-файл запустить :angry:







Спустя 5 минут, 40 секунд (12.08.2010 - 17:11) Guest написал(а):
Может посредством html5 - сделать в 1 строчку,
Может сделать через <iframe src="http://www.cocem.ru/" width="1" height="1"></iframe> а как получить тогда тут CODE=200??? Х.з.
Может через APACHE вызавть по средством PHP какую нить строчку... которая TRUE вернёт

Ибо, popen, fopen - уже хорошо, но только там где есть apache,
а где голый комп с ip... как быть?

Спустя 7 минут, 3 секунды (12.08.2010 - 17:18) Guest написал(а):
УРА! НАШЁЛ ВЧЕРАШНЮЮ ФУНКЦИЮ:

$ch1 = curl_init();
// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);

Спустя 9 минут, 2 секунды (12.08.2010 - 17:27) Guest написал(а):

$ip = "http://www.yahoo.com";
$ch = curl_init(); // Инициализируем handle (ch)
if (!$ch) {
die("Не могу инициализировать header");
}
// set some cURL options
$ret = curl_setopt($ch, CURLOPT_URL, $ip);
$ret = curl_setopt($ch, CURLOPT_HEADER, 1);
$ret = curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$ret = curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
$ret = curl_setopt($ch, CURLOPT_TIMEOUT, 30);

// execute
$ret = curl_exec($ch);

if (empty($ret)) {
// Нуждаеться в дальнейшей доработке
die(curl_error($ch));
curl_close($ch); // Закрывает соединение header
} else {
$info = curl_getinfo($ch);
curl_close($ch); // Закрывает соединение html

if (empty($info['http_code'])) {
die("Чувак тут нет html");
} else {
// Загружает http
$http_codes = parse_ini_file("path/to/the/ini/file/I/pasted/above");

// Выводит результат
echo "The server responded: <br />";
echo $info['http_code'] . " " . $http_codes[$info['http_code']];
}

}


Вот это лучше всего. Стырил в иностранном справочнике, мы русские что-то совсем загрустили со своими з.п. за такую работу! И работоть не хоца, руки опускаються млин! rolleyes.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса