簡體   English   中英

php exec無法在服務器上執行ping操作

[英]php exec doesn't work for ping on server

我正在嘗試使用exec函數對IP進行ping操作,以了解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()功能出現問題?

服務器上的安全模式也關閉,並且運行php版本5.3.29

我解決了這個問題,我以為所有服務器都在運行Windows,但是我的站點可以運行的服務器正在運行unix,而exec需要做一些改動:

在Windows上是:

exec('ping -n 4 '.$ip, $output, $return_var);

在Unix上,它是:

exec('ping -c 4 '.$ip, $output, $return_var);

但是新的問題是,它無法ping到實際上會被ping通但無法在cmd的ns_lookup中找到的ip。 這些IP中的一些會被ping通,而有些則不會。 在本地主機上工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM