我正在尝试使用exec函数ping IP,以了解IP是否被ping,它在localhost上完全正常并返回输出数组,但是当我在服务器上运行它时,它返回一个空输出数组。
当exec工作时,它返回一个数组作为$ output并返回变量$ return_var。
如果ping不成功,那么当IP无法ping通时,它会返回:
数组:包含9个元素
return_var:1
如果IP被ping,则返回:
数组:超过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()功能出现问题?
服务器上的安全模式也是OFF,它运行php版本5.3.29
答案 0 :(得分:1)
我解决了它,我认为所有运行Windows的服务器,但是我的网站所运行的是运行unix,exec需要一点改变:
在Windows上:
exec('ping -n 4 '.$ip, $output, $return_var);
在unix上,它是:
exec('ping -c 4 '.$ip, $output, $return_var);
但是新问题是,它没有ping实际上被ping的ips但是在cmd中的ns_lookup上找不到。其中一些ips被ping,有些则没有。在localhost上运行正常。