ホームページ >バックエンド開発 >PHPチュートリアル >サーバーログの定期的なルールの書き方を聞きたいです。

サーバーログの定期的なルールの書き方を聞きたいです。

WBOY
WBOYオリジナル
2016-06-23 14:15:091159ブラウズ

2013-06-23 04:33:51 W3SVC1539885 198.56.185.162 GET /robots.txt - 80 - 66.249.75.65 Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html) 404 0 2

日付 2013-06-23/時刻 04:33:51/サーバー ip198.56.185.162/ファイルアドレス robots.txt/スパイダー ip66.249.75.65/スパイダー情報 Mozilla/5.0+(互換) ; +Googlebot/2.​​1;++http://www.google.com/bot.html)/ステータス コード 404 0 2/、これを正確に一致させる方法は?具体例を挙げて、それからあなたが期待する結果を与えるのが最善ですが、あなたの質問はあなたがそれを理解できないことを意味します


具体的な例をあげて、それからあなたが期待する結果を与え、そしてあなたの質問はあなたが理解できないことを意味します。理解できません

コードは具体的な例です。取得したい値は以下にマークされています。通常の一致を記述し、pregmatch を使用して配列を生成し、その後他のことを行います。

この日付の形式は固定する必要があると思います。たとえば、

$log = '2013-06-23 04:33:51 W3SVC1539885 198.56.185.162 GET /robots.txt - 80 - 66.249.75.65 Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html) 404 0 2';var_dump( explode(' ', $log) ); /**array(14) {  [0]=>  string(10) "2013-06-23"  [1]=>  string(8) "04:33:51"  [2]=>  string(12) "W3SVC1539885"  [3]=>  string(14) "198.56.185.162"  [4]=>  string(3) "GET"  [5]=>  string(11) "/robots.txt"  [6]=>  string(1) "-"  [7]=>  string(2) "80"  [8]=>  string(1) "-"  [9]=>  string(12) "66.249.75.65"  [10]=>  string(72) "Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)"  [11]=>  string(3) "404"  [12]=>  string(1) "0"  [13]=>  string(1) "2"}*/


この日付の形式は固定する必要があります。スペースで分割できます。たとえば、

$log = '2013-06-23 04:33:51 W3SVC1539885 198.56.185.162 GET /robots.txt - 80 - 66.249.75.65 Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html) 404 0 2';var_dump( explode(' ', $log) ); /**array(14) {  [0]=>  string(10) "2013-06-23"  [1]=>  string(8) "04:33:51"  [2]=>  string(12) "W3SVC1539885"  [3]=>  string(14) "198.56.185.162"  [4]=>  string(3) "GET"  [5]=>  string(11) "/robots.txt"  [6]=>  string(1) "-"  [7]=>  string(2) "80"  [8]=>  string(1) "-"  [9]=>  string(12) "66.249.75.65"  [10]=>  string(72) "Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)"  [11]=>  string(3) "404"  [12]=>  string(1) "0"  [13]=>  string(1) "2"}*/


この日付の形式は、

$log = '2013-06-23 04:33:51 W3SVC1539885 198.56.185.162 GET /robots.txt - 80 - 66.249.75.65 Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html) 404 0 2';var_dump( explode(' ', $log) ); /**array(14) {  [0]=>  string(10) "2013-06-23"  [1]=>  string(8) "04:33:51"  [2]=>  string(12) "W3SVC1539885"  [3]=>  string(14) "198.56.185.162"  [4]=>  string(3) "GET"  [5]=>  string(11) "/robots.txt"  [6]=>  string(1) "-"  [7]=>  string(2) "80"  [8]=>  string(1) "-"  [9]=>  string(12) "66.249.75.65"  [10]=>  string(72) "Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)"  [11]=>  string(3) "404"  [12]=>  string(1) "0"  [13]=>  string(1) "2"}*/
のようにスペースで区切ることができるようにする必要があると思います

ただし、サーバーログのすべての行がこのようになっているわけではないので、通常の形式にしたいと思います。他の形式を除外する式。

この点は無駄にはできません

ログ ファイルは一般に非常に大きいです
ループ内で 1 行ずつ読み取り、配列に分割する必要があります

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。