- ベストアンサー
データをファイルに書き込むときの順番
どうも、お世話になります。 よろしくお願いいたします。 いま、PHPでデータファイルにデータを書き込むスクリプトを作っているんです。 で、ファイルに新しい情報を上から書き込んで生きたいんです。 ところが、どうしてもデータが1つだけしか書き込まれないんです。どんどん上書きされていってしまって、蓄積されません。 ためしに「rewind」をはずしてみたら、新しい情報が下に書き込まれてしまうんです。 ポインタの指定も間違っていないと思ってたんですが・・わかりません。 どうか上から順に追記できるようにアドバイスをお願いいたします! PHPバージョンは4.3.2です。 どうぞよろしくお願いいたします!
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 $max が設定されていないのでは。
その他の回答 (1)
- rara_sun
- ベストアンサー率50% (271/539)
結局、どういうことをやりたいのかわかりませんが・・・ 既にファイルに何らかの情報が入っているが、その情報は不用で、それをクリアしてもよいから、新しい情報を上から順に書きたいということですか? もしそうなら、ファイルをfopenで'w+'指定にすれば、ファイルポインタを ファイルの先頭に置き、ファイルサイズをゼロにします。 また、fseekなどで、ファイルポインタの位置を指定できます。 http://www.php.net/manual/ja/function.fseek.php あっ、もしかして、ファイルは開きっぱなしですか? ファイル操作は、それが必須という場合でなければ、書き込みが必要になったときにオープンし、使い終わったらクローズするように処理をいれた方が良いです。 セッションが複数になると、デッドロックなり、変な書きこまれ方になったり、書きこまれなかったりしますから・・。そういう不具合なくすためにも・・。 まっ、そういう場合を回避するためにflockっていうのがあるんでそれを使っても良いのですが・・。
補足
回答ありがとうございます! コードを追加するのを忘れていたのですが、 質問者は、追記ができなかったので・・ もともとファイルにある情報は残しつつ、ファイルの先頭に書き込みをしたいのです。 実際に作成しているのは、ログをデータファイルに書き込むスクリプトなんですが、書き込まれる順番がうまくいかないのです。 ソースはこれです↓ <? $datafile = 'test.dat'; $ip=$_SERVER["SERVER_ADDR"]; $browse=$_SERVER["HTTP_USER_AGENT"]; $servername=$_SERVER["SERVER_NAME"]; $date1=(date ("Y年m月d日(D)")); $date2=(date ("H時i分s秒")); $fp = fopen($datafile, "r+"); if(!$fp) { error("Error!! Don't open $datafile "); } flock($fp,2); $count = 1; rewind($fp); while( $data[$count] = fgets($fp, 8001)) { $count++; } $data[0] = "$ip,$browse,$servername,$date1,$date2"; rewind($fp); for($i = 0; $i < $count; $i++) { fputs($fp, $data[$i] . "\n"); if($max == $i) { break; } } flock($fp,3); fclose($fp); ?> よろしくお願いいたします!
お礼
あ、確かに(^-^; 入れてみたら・・・あ!なおりました!!! ありがとうございます!!! ケアレスミスだったんですねー。 ほんとに助かりました! いやー、ほんとありがとうございましたー^^