2017-08-04 82 views
-4

以及我已經寫了自己的PHP來ping終點並返回,如果它的上或下,簡單!這樣做.....那麼如果我想要做同樣的事情,但是要達到六個或更多個終點?重複同樣的過程會使它變得緩慢而低效嗎?是否有更簡單的方法來使用相同部分的代碼而不進行剪切和粘貼?避免重複使用相同的編碼器

節的代碼我使用: -

 $str1=exec("ping -c 1 -w 1 1.2.3.4",$a,$a1); 
    if(strlen($str1)>1){ 
$output1 = "<img src=\"images/green.png\">"; 
} else{ 
$output1 = "<img src=\"images/red.png\">"; 
} 

是重複相同的代碼確定或是否有更好的方式來實現這一目標: -

$str1=exec("ping -c 1 -w 1 1.2.3.4",$a,$a1); 
    if(strlen($str1)>1){ 
$output1 = "<img src=\"images/green.png\">"; 
} else{ 
$output1 = "<img src=\"images/red.png\">"; 
} 
    $str2=exec("ping -c 1 -w 1 1.2.3.5",$a,$a1); 
    if(strlen($str2)>1){ 
$output2 = "<img src=\"images/green.png\">"; 
} else{ 
$output2 = "<img src=\"images/red.png\">"; 
} 
    $str3=exec("ping -c 1 -w 1 1.2.3.6",$a,$a1); 
    if(strlen($str3)>1){ 
$output3 = "<img src=\"images/green.png\">"; 
} else{ 
$output3 = "<img src=\"images/red.png\">"; 
} 
    $str4=exec("ping -c 1 -w 1 1.2.3.7",$a,$a1); 
    if(strlen($str4)>1){ 
$output4 = "<img src=\"images/green.png\">"; 
} else{ 
$output4 = "<img src=\"images/red.png\">"; 
} 

IE,我可以列表IP作爲變量並依次調用每個IP?

$ip1 = 1.2.3.4 
$ip2 = 1.2.3.5 
$ip3 = 1.2.3.6 
$ip4 = 1.2.3.7 

謝謝大家。

+2

你爲什麼不使用一個IP地址數組,而不是對它們進行循環? – SuperDJ

+2

是的,你可以。這就是所謂的功能。即使是最基本的PHP教程也應該教你如何製作一個。 – ceejayoz

+2

有一個驚人的編程概念叫做「功能」,可以用「參數」調用......建議你閱讀它。 – CBroe

回答

0

嘗試一些接近這個:

<?php 
$ips = array('name1' => '1.2.3.4', 'name2' => '1.2.3.5'); 

function ping($ips, $a = 'default', $a1 = 'default') { 
    foreach($ips as $key => $value) { 
    $str1 = exec('ping -c 1 -w 1 '.$value, $a, $a1); 

    if(strlen($str1) > 1) { 
     echo $key.' <img src="images/green.png">'; 
    } else { 
     echo $key.' <img src="images/red.png">'; 
    } 
    } 
} 

$ips所有IP地址與名稱一起存儲。該名稱不是必需的,但它可以用於識別該函數需要3個參數$ips =數組,$a和兩者都可以在參數本身具有默認設置。您可以根據需要添加更多參數。

您只需通過使用調用該函數:

echo ping($ips); 

如果您確實需要更改$a$a1特定情況下使用:

echo ping($ips, 'a setting', 'a1 setting'); 
0

由於過於sarky意見建議的功能是什麼你在追求。你已經正確識別你重複你的代碼的一塊:

$str1=exec("ping -c 1 -w 1 1.2.3.4",$a,$a1); 
    if(strlen($str1)>1){ 
$output1 = "<img src=\"images/green.png\">"; 
} else{ 
$output1 = "<img src=\"images/red.png\">"; 
} 

因此,你可以很容易地使一個ping()函數來處理代碼。

function ping($ip) { 
    $output = []; 
    $status = ''; 

    $cmd = 'ping -c 1 -w 1 ' . $ip; 
    $result = exec($cmd, $output, $status); 

    return $result; 
} 

用法是類似以下內容:

$ips = [ 
    '255.255.255.0', 
    '255.255.255.1', 
    '255.255.255.2', 
]; 

$successImage = "<img src=\"images/green.png\">"; 
$failureImage = "<img src=\"images/red.png\">"; 

foreach ($ips as $ip) { 
    $result = ping($ip); 
    echo (strlen($result) > 1) ? $successImage : $failureImage; 
} 

編輯:這也許值得一提的是,內ping()$output$status都沒有用,所以你可以刪除它們,與可選參數一起在exec()Documentation for exec

您可能想要查看的功能的額外功能是讓您的ping參數-c 1 -w 1可以傳遞給函數的參數。這樣,您可以重新使用該函數來處理將來可能遇到的任何其他ping使用情況。