Apache-2.2

從 apache 錯誤日誌中排除 ping(從 PHP exec 執行)

  • December 15, 2017

現在,出於多種原因,我需要定期 ping 幾台主機以顯示儀表板。

我使用這個 PHP 函式來做到這一點:

function PingHost($strIpAddr) {
       exec(escapeshellcmd('ping -q -W 1 -c 1 '.$strIpAddr), $dataresult, $returnvar);
       if (substr($dataresult[4],0,3) == "rtt") {
               //We got a ping result, lets parse it.
                       $arr = explode("/",$dataresult[4]);
                       return ereg_replace(" ms","",$arr[4]);
       } elseif (substr($dataresult[3],35,16) == "100% packet loss") {
               //Host is down!
                       return "Down";
       } elseif ($returnvar == "2") {
               return "No DNS";
       }
}

問題是每當有未知主機時,我都會在我的 apache 錯誤日誌 (/var/log/apache/error.log) 中記錄一個錯誤。我將如何禁用此特定功能的日誌?

禁用虛擬主機中的日誌不是一個選項,因為該虛擬主機的日誌是相關的,而不是 ping。

謝謝,

您需要將某些內容更改為您的函式-基本上 exec 不會擷取寫入日誌文件的標準錯誤-您需要按以下方式更改函式

function PingHost($strIpAddr) {
   exec(escapeshellcmd('ping -q -W 1 -c 1 '.$strIpAddr.' 2>&1'), $dataresult, $returnvar);
   if (substr($dataresult[4],0,3) == "rtt") {
           //We got a ping result, lets parse it.
                   $arr = explode("/",$dataresult[4]);
                   return ereg_replace(" ms","",$arr[4]);
   } elseif (substr($dataresult[3],35,16) == "100% packet loss") {
           //Host is down!
                   return "Down";
   } elseif ($returnvar == "2") {
           return "No DNS";
   }
   if($returnvar == 68)
           return "Unknown host";

}

引用自:https://serverfault.com/questions/217661