避免一遍又一遍地重复同一个编码器

时间:2017-08-04 13:53:11

标签: php

我已经写了自己的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 个答案:

答案 0 :(得分:1)

正如过于强烈的评论所暗示的那样,功能就是你所追求的。您已经正确识别了正在重复的代码段:

$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用例。

答案 1 :(得分: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$a1两者都可以在参数中具有默认设置本身。您可以根据需要添加更多参数。

您只需使用以下方法调用该函数:

echo ping($ips);

如果您确实需要针对具体案例使用更改$a$a1

echo ping($ips, 'a setting', 'a1 setting');
相关问题