Я пишу инструмент ping с использованием CakePHP 3. Код работает на моем сервере разработки, возвращая правильный статус 0
, Но на рабочем сервере он всегда показывает код состояния 2
вместо 0
, несмотря на погоду $ip
действителен или нет.
Это мой код:
public function testDomain(){
if($this->request->is('post')){
$ip = $this->request->data['domain'];
$starttime = microtime(true);
$stoptime = microtime(true);
$total_time = ($stoptime - $starttime) * 1000;
exec("ping -n 3 $ip", $output, $status);
print_r($status);
if (0 == $status) {
echo $mode = 'up';
if($total_time <= '500'){
$result = 'Very Fast';
}else if($total_time <='1000'){
$result = 'Fast';
}else if($total_time <='1500'){
$result ='Good';
}else if($total_time <='2500'){
$result ='Slow';
}else if($total_time <='3000'){
$result ='Very Slow';
}else{
$result ='down';
}
echo $ip.' '.'is'.' '.$result;
}else{
echo $mode = 'down';
}
}
exit;
}
Ваша машина разработки, вероятно, Windows, а ваш рабочий сервер Linux.
Вот что происходит, когда вы запускаете команду в Linux:
me@mycomputer:~$ ping -n 3 192.168.0.1
connect: Invalid argument
3
не является допустимым аргументом для ping
,
Ваша команда в Linux должна быть переписана как:
exec("ping -c 3 $ip", $output, $status);
Других решений пока нет …