複数指定して抽出 - PHPプロ!Q&A掲示板

4959

  • 募集中!! 0P

複数指定して抽出

質問日時 / 2018年7月4日 14:25 (最終編集:7月4日 14:37)    回答数 / 1件

Questioner:  huzisaki  このエントリーをはてなブックマークに追加 

キーワード / php   

お世話になります。
このようなログがあるとします。
aiueo.rog
<12>1 2017-10-22  T00:00:17.137  +09:00 10.111.111.111 SRX550-KCA RT_UTM - 
    ↑時間     ↑日付
WEBFILTER_URL_PERMITTED [junos@2636.1.1.1.2.86 source-address="10.168.22.22" 
                                  ↑IPアドレス①
port="57632" destination-address="208.33.333.333" destination-port="443" 
                   ↑IPアドレス②
category="N/A" reason="BY_LOCAL_DEFAULT" profile="k-l7loging" 


これがログの一つですが、これが複数あります。このログのうち↑のある部分を入力して該当するデータがあったらその該当するデータを抽出するプログラムを作りたいのですがよくわかりませんでした。
ぜひご教授お願いします。


ツリー一覧

┗A01shimixログファイル名がヘン(拡張子が.rog)だとか時間と日

回答一覧

並び替え:

A01
answerershimix [7月4日 15:26] (最終編集:7月6日 14:28)

ログファイル名がヘン(拡張子が.rog)だとか時間と日付が逆じゃないのとかマルチバイト文字の空白が混じっているが実際はタブじゃないのかとかIPアドレスとしてあり得ない値を例示するのはどうなんだとかツッコミどころは満載ですが(汗

>よくわかりませんでした。

「どの部分がわからないのか」を書いていただかないと何とも回答のしようがありません。



strposでチェックするなら、下記のようなコードになるとは思いますが・・・

  1. <?php
  2. if ($_POST) {
  3.   $date = isset($_POST['date']) ? trim($_POST['date']) : "";
  4.   $time = isset($_POST['time']) ? trim($_POST['time']) : "";
  5.   $source = isset($_POST['source']) ? trim($_POST['source']) : "";
  6.   $destination = isset($_POST['destination']) ? trim($_POST['destination']) : "";
  7.   if ($date !== "") { $date = $date}
  8.   if ($time !== "") { $time = 'T' . $time}
  9.   if ($source !== "") { $source = ' source-address="' . $source . '"'}
  10.   if ($destination !== "") { $destination = ' destination-address="' . $destination . '"'}
  11.   
  12.   foreach (file('aiueo.log'FILE_SKIP_EMPTY_LINES) as $line) {
  13.     if (($date !== "")&&(strpos($line$date) === false)) { continue}
  14.     if (($time !== "")&&(strpos($line$time) === false)) { continue}
  15.     if (($source !== "")&&(strpos($line$source) === false)) { continue}
  16.     if (($destination !== "")&&(strpos($line$destination) === false)) { continue}
  17.     echo htmlspecialchars($lineENT_QUOTES) . "<br>";
  18.   }
  19. } else {
  20.   ?>
  21.   <form action="" method="post">
  22.   日付 <input type="text" name="date"><br>
  23.   時刻 <input type="text" name="time"><br>
  24.   source-ip <input type="text" name="source"><br>
  25.   destination-ip <input type="text" name="destination"><br>
  26.   <input type="submit">
  27.   </form>
  28.   <?php
  29. }




(2018/07/06 追記)

相互リンク
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13192766723

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)