簡體   English   中英

PHP-Linux上的Ping執行掛起腳本

[英]PHP - Ping exec on Linux hangs script

我有一個簡單的PHP腳本設置來檢查服務器的狀態。 它使用通過exec()運行的標准ping命令。

  • 在Windows上,無論服務器處於聯機狀態還是停機狀態,腳本都可以正常工作。
  • 在Linux上,該腳本在服務器聯機時起作用,但在服務器關閉時掛起。 超時似乎對后者沒有影響。

通過控制台使用同一命令ping可以正常工作並正確超時。


原因是什么,如何解決?

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
  $exec_string = 'ping -n 1 -i 255 -w 2 ' . $host;
} else {
  $exec_string = 'ping -n -c 1 -t 255 -w 2 ' . $host;
}
exec($exec_string, $output, $return);

我會避免直接使用exec() ping操作。 我使用此腳本, 位於此處 ,還可以設置端口和超時:

function ping($host, $port = 80, $timeout = 6) {
    $fsock = fsockopen($host, $port, $errno, $errstr, $timeout);
    if (!$fsock) {
        return false;
    } else {
        return true;
    }
}

$host = 'www.example.com';

if(ping($host)) {
    echo "HOST UP";
} else {
    echo "HOST DOWN";
}

我不確定為什么,但是從suPHP切換到fastCGI(都啟用了suEXEC)似乎可以解決該問題,並且ping可以按預期正確地超時。

如果有人對此有解釋,我想知道以評論或答案的形式。

暫無
暫無

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

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