[PHP-users 16678]Re: ログファイルの改行について

UNO Shintaro uno @ venus.dti.ne.jp
2003年 7月 14日 (月) 17:03:12 JST


>最近PHPをを始めて、さっそく掲示板をがんばってみました。

んー、自作しなくてもPHP用掲示板スクリプトなんて山ほど転がってると
思いますが、わざわざ自分で書く理由は? 「お勉強」ですか?


>削除すると、ログファイルの末尾に改行が毎回増えて、
>もう何日も考えたり調べたり(もちろんML検索も)しましたが
>わからないんです。。。

file読み込みloopのところで、終了判定方法が間違ってます。
最後の行を読んだ直後にはまだfeofはtrueにはなりません。
最後の行の「次」をfgetcsvで読もうとするとfgetcsvがfalseを返します。
その後でfeofを調べるとtrueになっています。

aikoさんのcodeは「最後の行を読んだ直後に既にfeofがtrueになっている」と
いう間違った前提の元で書かれているようで、最終行の処理の次にもう一回、
余計にloop内処理が行なわれます。そのときのfputs($ichigo,$data)において
$dataの中身は、false(file末尾でのfgetcsvの結果)をexplodeしてimplode
して改行をくっつけたものなので、結果として空行が追加されます。

なので、

>	while(!feof($fp)){
>	$data =fgetcsv($fp,1024);
		:
		:
>		fputs($ichigo,$data);
>		
>	}
>	fclose($ichigo);
>	fclose($fp);

↑こうではなくて、↓こんな感じ(エラー判定などは略してますが)

	while($data = fgetcsv($fp,1024)){
		:
		:
		fputs($ichigo,$data);
	}
	fclose($ichigo);
	fclose($fp);

にすれば現象は解消されると思います。

-- 
UNO Shintaro, 宇野 信太郎
mailto:uno @ venus.dti.ne.jp
http://www.venus.dti.ne.jp/~uno/


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