Я пытаюсь пропинговать 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
Я решил это, я думал, что все серверы работают под управлением 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 работает нормально.
Других решений пока нет …