2013-02-20 121 views
1

我一直在使用下面的腳本,但是,我希望它能ping 3-4次,如果它有3-4次,如果它甚至有單個請求超時,我想php回來失敗。PHP pinging,甚至1請求超時

下面是我使用的腳本:

<?php 

function pingAddressHasNeverFailed($tries) { 
    for ($i = 0; $i < $tries; $i++) { 
     $pingresult = shell_exec("ping -c 1 www.google.com", $outcome, $status); 
     if ($status != 0) 
      return false; 
    } 
    return true; 
} 

if (pingAddressHasNeverFailed(3)) { 
    echo "uoc gi"; 
} 
?> 

如果可以請幫幫忙,謝謝你這麼多提前!

+0

這是要在Windows上專用嗎? – 2013-02-20 06:36:19

+0

不,我在linux/centos上使用 – thevoipman 2013-02-20 06:38:26

+0

那你爲什麼要用'-n 3'?它不應該是'-c 3'嗎? – 2013-02-20 06:39:27

回答

2

如果任何ping失敗(一組),它不會在輸出(即0%丟包),這是Linux和Windows相同0%

function ping($host, $times = 3) 
{ 
    exec("/bin/ping -c 3 $host", $out, $status); 

    return $status === 0 && false !== strpos(join('', $out), '0%'); 
} 

if (ping('www.google.com)) { 
    echo "yay\n"; 
} else { 
    echo "oh dear\n"; 
} 

您可能需要調整ping參數,以適應你的環境,並確保主機名消毒。

2

在這種情況下,您需要執行命令n(n是次數)。例如:

function pingAddressHasNeverFailed($tries) { 
    $outcome = array(); 
    $status = -1; 

    for ($i = 0; $i < $tries; $i++) { 
     $pingresult = exec("/bin/ping -n 1 www.google.com", $outcome, $status); 
     if ($status != 0) 
      return false; 
    } 
    return true; 
} 

用法:

if (pingAddressHasNeverFailed(3)) { 
    //do something useful 
} 
+0

我試過這個,得到了:PHP注意:未定義的變量: – thevoipman 2013-02-20 06:40:54

+0

@thevoipman的結果我複製並粘貼了您的代碼。忘記初始化我的本地變量。編輯的代碼。 – Leri 2013-02-20 06:46:32

+0

也正如傑克所說,你想在Linux上使用-c而不是-n。 – 2013-02-20 06:49:17