2009年12月16日

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

大久保です。

岸本 弥生 <yayoi@xxxxx> 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@xxxxx> 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@xxxxx
> 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 mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2009年12月16日 02:03
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/91446
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。