[PHP-users 34882] Re: ファイルの逆読みの方法に関して

MasamiOhkubo debizoh @ pumpkinnet.to
2009年 12月 16日 (水) 02:03:11 JST


大久保です。

岸本 弥生 <yayoi @ back-in-time.jp> wrote:

> そこで、最新から遡って1000行まで表示する様に変更したいのですが、どうしても
> ファイル全体を一旦読み込まないとならずにエラーを回避できません。


適当に書いたソースですが、こんな風になります。
seek_pointer 配列でメモリが足りなくなるようであれば
一時的にファイルなどに書き込むなどすれば良いでしょう。

<?php
$pointer = 1000;

$handle = @fopen("testline.txt", "r");
$seek_pointer = array();

if ($handle) {
    $line = 0;
    while (!feof($handle)) {
        $seek_pointer[$line] = ftell($handle);
        $buffer = fgets($handle);
        $line++;
    }

   if ($pointer < $line)
   {
       $seek_target = $seek_pointer[ abs($pointer - $line) - 1 ];
   }
  else
  {
      $seek_target = 0;
  }

  $array_lists = array();
  fseek($handle, $seek_target);
  while (!feof($handle))
  {
     $array_lists[] = fgets($handle);
  }

    fclose($handle);


}
?>




On Wed, 16 Dec 2009 01:04:06 +0900
岸本 弥生 <yayoi @ back-in-time.jp> wrote:

> はじめまして、岸本と申します。宜しくお願いします。
> 現在下記の現象で困っています、助言いたたければ幸いです。
> 
> 
> 開発を担当しているシステムでアプリケーションログを出力しています。
> そのログファイルを表示するWEBアプリを作成しているのですが、ログファイルの
> 容量が大き過ぎてphpがメモリオーバで終了してしまいます。
> 
> エラー内容:
> Allowed memory size of 134217728 bytes exhausted
> 
> そこで、最新から遡って1000行まで表示する様に変更したいのですが、どうしても
> ファイル全体を一旦読み込まないとならずにエラーを回避できません。
> できればファイルを逆読みして1000行目で読み込みを中断して表示させたいのですが
> 苦心しています。
> 
> ちなみに下記が現行のコードです。(一行目のfile関数でアウトです)
> 
>   $_log = file("/hogehoge/Apllog.log");
>   $log = array_splice($_log, 1, count($_log)-1000);
> 
> ログファイルはlogrotateで肥大化しない様に工夫してあります。
> 
> 極力memory_limitの値は変更せずに対応したいのですが、、
> ヒントでも構いませんので宜しくお願いします。
> 
> 以上
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3


-- 大久保 政実(Masami ohkubo / debizoh) -------------
--   URL:http://www.venus.dti.ne.jp/~debizoh/
--
-- わいわいCommunication NetWork "The PumpkinNet"
--                      http://www.pumpkinnet.to/
-- PumpkinNet CGI工房
-- http://www.pumpkinnet.to/cgikoubou/
--



PHP-users メーリングリストの案内