Я пытаюсь пропинговать IP-адрес, чтобы проверить IP-адрес, доступен ли он или нет. Но у меня возникли проблемы при использовании функции fsockopen. Я провел некоторые исследования по использованию функций «ping», «exec», но ни один из них не казался реально работоспособным.
Вот мой код для проверки IP-адреса:
<?php
$ipAddress = array("192.168.1.1","192.168.1.67");
$kiosk = array("Kuantan (35)","UTC Kuantan (36)");
$checkCount = 0;
foreach(array_combine($ipAddress,$kiosk) as $items => $kiosk){
$fp = @fSockOpen($items,80,$errno,$errstr,1);
if(is_resource($fp)){
if($fp) {
$status=0;
fclose($fp);
echo 'Success<br/>';
}
}
else{
echo 'Failed<br/>';
}
}
?>
Оба IP-адреса я могу пинговать из командной строки. Но для 192.168.1.67 это привело меня к «Сбой», только к 192.168.1.1. или 127.0.0.1, показывающий мне «Успех». Что-то я делаю не так?
Ваш код на самом деле не проверяет связь, а просто пытается открыть TCP-соединение через порт 80. Команда ping использует ICMP-пакеты, поэтому, вероятно, 192.168.1.67 не принимает подключения через порт 80.
После вашего чата с Catalyst приведен пример кода, который будет отправлять только два пакета и ждать ответа до 2 секунд. $ retval будет равен 0 при успехе, 1 при потере пакета, 2 при любой другой ошибке. Это в Linux, параметры команды Windows немного отличаются, но вы должны иметь возможность изменить это.
<?
// unset variables first to avoid mixing the results from previous calls
$retval=-1;
$output=array();
exec("ping 127.0.0.1 -c2 -w2 2>&1",$output,$retval);
echo "Return code: ".$retval."<br>\n";
echo implode("<br>\n",$output);
?>
Других решений пока нет …