php exec不适用于服务器

时间:2015-11-26 07:53:36

标签: php arrays server exec ping

我正在尝试使用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

1 个答案:

答案 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上运行正常。