2017-08-30 3 views
-1

私はいくつかの出力をループするためにいくつかのコードに取り組んでいます、私のスクリプトは、私の問題が何であるかを識別できる誰も待っているようです。例えば192.168.0.5、私が1000以上のものを印刷したい展開されたファイルをループするPHPエラー

5 192.168.0.2 
4 192.168.0.3 
3 192.168.0.4 
11428 192.168.0.5 
10 192.168.0.7 

、またはすべてが1000以下である場合だけOKを印刷:

#!/usr/bin/php -q 

exec("string_of_bash_commands", $in); 

    foreach($in as $line) { 
    $line = explode(' ', $line); 
    if($line[0] > 1000) { 
     echo "Critical: $line[1] has $line[0]"; 
      exit; 
    } 

} 
echo "OK"; 

で$、以下のようにデータを受け取ります。
コードを変更するにはどうすればよいですか?

+1

あなたの 'exec()'は二重引用符で囲まれた文字列で始まります。どこで終了しますか? –

+0

私の謝罪、はい私はそれを修正しました。 execの出力ステートメントはipの – sawe

+0

で出力しても問題ありません上記のサンプルデータの期待される出力をより正確に説明できますか?また、コードまたは1000のように100であり、すべてが1000未満の場合でも、まだ50を超えるリストがリストされます。 –

答えて

0
// It is good practice to define some settings at the top of your code: 
define('WARNING_THRESHOLD', 1000); // Place this up top in your code 

$lines = explode("\n", $in); 
foreach($lines as $line_number=>$line) { 
    list($number, $ip) = explode(' ', $line); 
    echo $ip.' '.$number.' '; 
    echo $number >= WARNING_THRESHOLD ? 'WARNING' : 'OK'; 
} 

192.168.0.2 5 OK
192.168.0.3 3 OK
192.168.0.5 11428 WARNING
192.168.0.7 10 OK 4 OK

192.168.0.4

また、それらを別々のアレイに入れたい場合:

define('WARNING_THRESHOLD', 1000); // Place this up top in your code 

$lines = explode("\n", $in); 
foreach($lines as $line_number=>$line) { 
    list($number, $ip) = explode(' ', $line); 
    if($line[0] >= WARNING_THRESHOLD){ 
     $ipsGood[] = $ip; 
    } else{ 
     $ipsBad[] = $ip; 
    } 
} 
+0

foreach文は行を読んでいません:print $ lineはファイル全体を出力し、$ line [any_digit]は何も印刷しません。 – sawe

+0

改行 – Martijn

関連する問題