php exec не работает для ping на сервере
Я пытаюсь пропинговать IP с помощью функции exec, чтобы узнать, пингуется ли IP или нет, он отлично работает на localhost и возвращает выходной массив, но когда я запускаю его на сервере, он возвращает пустой выходной массив.
когда exec работает, он возвращает массив как $ output и возвращает переменную как $ return_var.
если ping неуспешен, поэтому, когда IP не может быть пропингован, он возвращает:
массив: с 9 элементами
return_var: 1
если IP пропингован, он возвращает:
массив: более 9 элементов
return_var: 0
на сервере он возвращает:
пустой массив
return_var: 2
как я искал и обнаружил, когда return_var равен 2, это означает, что exec не работает и есть ошибка.
это мой код:
<?php
exec('ping -n 4 '.$ip, $output, $return_var);
echo "<pre>";
var_dump($output);
?>
exec() не отключен на сервере, я попробовал это:
<?php
$disabled = explode(',', ini_get('disable_functions'));
echo "<pre>";
var_dump($disabled);
?>
и это список отключенных функций, который я получил:
array(8) {
[0]=>
string(7) "symlink"
[1]=>
string(10) "proc_close"
[2]=>
string(9) "proc_open"
[3]=>
string(5) "popen"
[4]=>
string(6) "system"
[5]=>
string(2) "dl"
[6]=>
string(8) "passthru"
[7]=>
string(14) "escapeshellcmd"
}
есть ли вероятность того, что какая-либо из этих заблокированных функций вызовет проблемы с функциональностью exec()?
также безопасный режим выключен на сервере, и он работает php версии 5.3.29
1 ответ
Я решил это, я думал, что все серверы работают под управлением Windows, но тот, на котором работает мой сайт, работает под управлением Unix, и exec нужно немного изменить:
на окнах это:
exec('ping -n 4 '.$ip, $output, $return_var);
и на Unix, это:
exec('ping -c 4 '.$ip, $output, $return_var);
но новая проблема в том, что он не пингует ips, который на самом деле пингуется, но не может быть найден в ns_lookup в cmd. некоторые из этих ips пингуются, а некоторые нет. на localhost работает нормально.