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

Nobuya MATSUKIZONO zeathwing @ gmail.com
2009年 12月 16日 (水) 01:10:05 JST


松木薗と申します。

>  $_log = file("/hogehoge/Apllog.log");
>  $log = array_splice($_log, 1, count($_log)-1000);
file関数はファイル「全部を一気に」読み込む関数なのでメモリオーバーになります。

fopenで回して読み込んでみて下さい。
参考:PHPでテキストファイル等を開き、一行ずつ読み込む
http://phpnet.blog91.fc2.com/blog-entry-17.html

*==*==*==*==*==*
松木薗 暢哉 (Nobuya MATSUKIZONO)
E-mail: zeathwing @ gmail.com



2009/12/16 岸本 弥生 <yayoi @ back-in-time.jp>:
> はじめまして、岸本と申します。宜しくお願いします。
> 現在下記の現象で困っています、助言いたたければ幸いです。
>
>
> 開発を担当しているシステムでアプリケーションログを出力しています。
> そのログファイルを表示する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
>


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