updated on 2019-02-03
<?php $ip = explode(".", trim(fgets(STDIN))); // 入力IPの配列 $ip_ary = array(); for($i=2; $i<4; $i++){ // 第3と第4オクテットの[]を外してIPアドレス配列に入れる $ip_ary[$i] = trim($ip[$i], "[]"); // 第3と第4オクテットの*を0-255に読み替える $ip_ary[$i] = str_replace("*", "0-255", $ip_ary[$i]); } $ip_3 = array(); $ip_3 = explode("-", $ip_ary[2]);//第3オクテット配列 $ip_4 = array(); $ip_4 = explode("-", $ip_ary[3]);//第4オクテット配列 $N = trim(fgets(STDIN)); // ログの行 $info = array(); for($j=0; $j<$N; $j++){ // ログの行と情報別の多次元配列 $info[$j] = explode(" ", fgets(STDIN)); } $info_ip = array(); for($k=0; $k<$N; $k++){ // 多次元配列の二層目のインデックス0がIPアドレスであり,それをオクテットごとに区切って$info_ip配列に渡す $info_ip[$k] = explode(".", $info[$k][0]); } // ログのIPアドレス配列のマッピング foreach($info_ip as $key => $info_ip_v){ // ログの第一オクテットと検索するIPアドレスの第一オクテットが一致したら if($info_ip_v[0] == $ip[0]){ // 第二オクテットが一致したら if($info_ip_v[1] == $ip[1]){ // 第三オクテットが一致したら if($info_ip_v[2] == $ip[2]){ // 第四オクテットが一致もしくは第四オクテット配列の範囲内であったら if($info_ip_v[3] == $ip[3]){ // IPアドレス アクセス日 ファイル名 echo $info[$key][0]. " ". trim($info[$key][3], '['). " ". $info[$key][6]. "\n"; }elseif($ip_4[0] <= $info_ip_v[3] && $info_ip_v[3] <= $ip_4[1]){ echo $info[$key][0]. " ". trim($info[$key][3], '['). " ". $info[$key][6]. "\n"; } // 第三オクテット配列の範囲内であったら }elseif($ip_3[0] <= $info_ip_v[2] && $info_ip_v[2] <= $ip_3[1]){ if($ip_4[0] <= $info_ip_v[3] && $info_ip_v[3] <= $ip_4[1]){ echo $info[$key][0]. " ". trim($info[$key][3], '['). " ". $info[$key][6]. "\n"; }elseif($info_ip_v[3] == $ip[3]){ echo $info[$key][0]. " ". trim($info[$key][3], '['). " ". $info[$key][6]. "\n"; } } } } } ?>