• ベストアンサー

データをファイルに書き込むときの順番

どうも、お世話になります。 よろしくお願いいたします。 いま、PHPでデータファイルにデータを書き込むスクリプトを作っているんです。 で、ファイルに新しい情報を上から書き込んで生きたいんです。 ところが、どうしてもデータが1つだけしか書き込まれないんです。どんどん上書きされていってしまって、蓄積されません。 ためしに「rewind」をはずしてみたら、新しい情報が下に書き込まれてしまうんです。 ポインタの指定も間違っていないと思ってたんですが・・わかりません。 どうか上から順に追記できるようにアドバイスをお願いいたします! PHPバージョンは4.3.2です。 どうぞよろしくお願いいたします!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 $max が設定されていないのでは。

nudy
質問者

お礼

あ、確かに(^-^; 入れてみたら・・・あ!なおりました!!! ありがとうございます!!! ケアレスミスだったんですねー。 ほんとに助かりました! いやー、ほんとありがとうございましたー^^

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.1

結局、どういうことをやりたいのかわかりませんが・・・ 既にファイルに何らかの情報が入っているが、その情報は不用で、それをクリアしてもよいから、新しい情報を上から順に書きたいということですか? もしそうなら、ファイルをfopenで'w+'指定にすれば、ファイルポインタを ファイルの先頭に置き、ファイルサイズをゼロにします。 また、fseekなどで、ファイルポインタの位置を指定できます。 http://www.php.net/manual/ja/function.fseek.php あっ、もしかして、ファイルは開きっぱなしですか? ファイル操作は、それが必須という場合でなければ、書き込みが必要になったときにオープンし、使い終わったらクローズするように処理をいれた方が良いです。 セッションが複数になると、デッドロックなり、変な書きこまれ方になったり、書きこまれなかったりしますから・・。そういう不具合なくすためにも・・。 まっ、そういう場合を回避するためにflockっていうのがあるんでそれを使っても良いのですが・・。

nudy
質問者

補足

回答ありがとうございます! コードを追加するのを忘れていたのですが、 質問者は、追記ができなかったので・・ もともとファイルにある情報は残しつつ、ファイルの先頭に書き込みをしたいのです。 実際に作成しているのは、ログをデータファイルに書き込むスクリプトなんですが、書き込まれる順番がうまくいかないのです。 ソースはこれです↓ <? $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); ?> よろしくお願いいたします!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • CSVファイルからのデータ書き出し順番

    現在、CSV形式で保存してあるデータベースをPERLで読み込んで、htmlで表示させるというスクリプトを作りましたが、CSVファイルに保存してある順番でしか表示する事ができません。(ただ単に順に読み込ませている為) これを、例えばデータ内の項目:価格の高い順・低い順・商品の種類順などと指定したように表示させるにはどうすれば良いでしょうか? お分かりの方、教えて下さい。(もしくはヒント・提案をお願い致します。) あるいは、そのようなサンプルスクリプトをお知りでしたら教えて下さい。 宜しくお願いします。

    • 締切済み
    • CGI
  • 上書きされたhtmlデータの復元…

    ホームページビルダー9でページを作成し、保存しました。さらに他のページを作成し、保存をしようとしたら最初に保存したページに間違えて上書き保存をしてしまいました。。。 最初のデータを復元させたいのですが、ビルダーの設定で、バックアップファイルとhtmファイルは作成しないようにしてたため、ここからの復元ができませんでした。 システムの復元でも駄目でした。 この上書きされてしまったhtmlファイルを復元できる方法はないのでしょうか? 最初のhtmlデータの完成後、Internet Explorerで試しに閲覧したので、Internet Explorerの履歴からそのページを閲覧しようとしたところ、上書きした方のデータしか見ることができませんでした。(当たり前ですが…) パソコンには以前のデータもどこかに蓄積してあると聞いたのですが、この蓄積してある場所からデータを復元することもできないのでしょうか? わかる人がいましたらよろしくお願いします。

  • データーを復元したいけど破壊されたファイルになってます。でも・・

    USBメモリに入れてあった、旅行に行ったときの写真データーを勘違いして消去し、その上から又違う写真を上書きしてしまいました。 諦め半分で「ファイナルデーター3.0特別復元版」で検索したら、ファイル情報は「破壊されたファイル」となりました。 でも撮影日時や、データーの容量は表示されるんです。 585KB 2007.6.30 21:31:08 みたいな感じで。 念のため復元キーで復元し、他のファイルに保存もしてみたのですが見れませんでした。 プレビューで確認しても 「ファイルプレビューでサポートされていないファイル形式です。」 となってみれません。 容量や撮影日時がキチンと出てるだけに諦めきれずに質問することにしました。 どうかよろしくお願いいたします。 追記 他の復元ファイルで検索して見ても撮影日時等のは出ませんでした。 ファイナルデーターでのみでました。

  • データファイルの行を削除する

    掲示板のようなものを作っています。 データを、1投稿につき1行使って、項目を記号を使って分割させています。 1,こんにちは,umi,2004-4-1 みたいな感じですが、記事を1行削除するときの処理なのですが、 1,ファイルをロックして読み込み 2,削除する以外の行を$buffに入れる 3,rewindでポインタを先頭に 4,書き込み、ロック解除 のような処理をしているのですが、一番下の行に古いデータが残ってしまいます。 例えば 4,またあした,umi,2004-4-1 3,おはよう,umi,2004-4-1 2,さようなら,umi,2004-4-1 1,こんにちは,umi,2004-4-1 というデータの上から2行目を削除すると 4,またあした,umi,2004-4-1 2,さようなら,umi,2004-4-1 1,こんにちは,umi,2004-4-1 1,こんにちは,umi,2004-4-1 というふうになってしまいます。 通常、このような場合はどのように処理すればよろしいのでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • テキストファイルの読み込みとファイルポインタについて質問です。

    テキストファイルの読み込みとファイルポインタについて質問です。 最近PHPを勉強し始めました。 fgets()とfseek()についてわからないことがあるので教えて頂けないでしょうか。 現状以下のテキストとPHPファイルを用意しています。 PHPに2行目のbを表示させたいのですが、思ったように表示をさせることができません。 fgets()は"現在のファイルポインタから次の1行を取得" fseek()は"ファイルポインタを指定したバイト数分移動する"と調べてわかりました。 この二つを使って2行目を指定してbを表示したいのですがうまく表示されて困っています。 test.phpのコメントの★の部分がわからない箇所になります。 おそらく根本的な考え方が間違っていると思うのですが…いろいろ調べたのですがわかりませんでした。 申し訳ありませんがご教授願えないでしょうか。 ----------------- new.txt ----------------- a b c d e ----------------- ----------------- test.php ----------------- <?PHP $new_file = 'new.txt'; $fpt = fopen($new_file,'r'); // ファイルオープン直後のポインタ位置 echo '現在の位置=行指定'.ftell($fpt).'<br>'; print fgets($fpt).'<br>'; // ポインタを5進める fseek($fpt,5); echo '現在の位置=行指定'.ftell($fpt).'<br>'; // ポインタの位置確認 print fgets($fpt).'<br>'; // ★ここでeを表示したい // 現在の位置からポインタを3戻す fseek($fpt,-3,SEEK_CUR); echo '現在の位置=行指定'.ftell($fpt).'<br>'; // ★行指定が5-3なので2に…ならないです。 print fgets($fpt).'<br>'; // ポインタを先頭へ rewind($fpt); echo '現在の位置=行指定'.ftell($fpt).'<br>'; // ポイントが先頭にきたか確認 print fgets($fpt).'<br>'; // ポインタを最後へ fseek($fpt,0,SEEK_END); echo '現在の位置=行指定'.ftell($fpt).'<br>'; // ★new.txtはabcdeの5行なので5になると思いきや18に… print fgets($fpt).'<br>'; fclose($fpt); // ファイルを閉じる ?> ----------------- ----------------- 実行結果 ----------------- 現在の位置=行指定0 a 現在の位置=行指定5 現在の位置=行指定3 b 現在の位置=行指定0 a 現在の位置=行指定18

    • ベストアンサー
    • PHP
  • データCD-Rへ書き込むファイルの順番を指定できるソフト

    車で聞くMP3のCDを作成したいのですが、手持ちのB's Recorder Goldではこれが出来ません。数字順、アルファベット順に並んでしまいます。 ファイル名の頭にを001、002~と書けば良いのは分かっているのですが、そうではなくデータCD-Rへ書き込むファイルの順番を指定できるソフトを探しています。 フリー/有料は問いませんので、もしご存じの方がいらっしゃいましたらご教示頂けるとうれしいです。

  • csvファイルからデータをダブらないように配列に格納するには?

    PHPのスクリプトでどうやって組めばいいかわからないことがあり、 質問させていただきました。 以下のような10行×3列のカンマ区切りのファイル(test.csv)があるとします。 東京,名前1,3 神奈川,名前2,1 東京,名前3,1 愛知,名前1,1 大阪,名前2,2 京都,名前3,3 沖縄,名前1,3 東京,名前2,1 神奈川,名前3,3 福島,名前1,1 列に同じ名前のデータが入っていたりします。 (例えば1列目に東京が3つある) 1列目のデータからダブりがないように上から順に配列に格納するにはどうすればよろしいのでしょうか?

    • ベストアンサー
    • PHP
  • iniファイルに追記がしたいです。

     いつもお世話になっています。  iniファイルの中のあるデータをGetPrivateProfileStringで調べて、その中になければデータを  追記したいです。  WritePrivateProfileStringの場合、iniファイルにあるデータが追記したい内容がないだけで、他のデータが 入っていても、上書きされてしまうんですよね?  もしその中に他のデータが入っていた場合は、追記をしたいのですが、それができるAPI関数って  何かありますか?  iniファイルに関して、ネットで調べていると、WritePrivateProfileStringなどしか出てこなくて・・・。  もしできないようでしたら、追記できるような何かいいアイディアがあれば・・・と思っています。  すみませんが、よろしくお願いします。  わかりづらい文章で申し訳ありません。

  • 外部ファイル名を変数で指定できるか?

    JavaScriptで参照する外部ファイルを、ヘッダー部で以下のように記述しています。 <script language="JavaScript" src="Data.js"></script> このsrc=で、指定するファイルを、変数で指定することは可能でしょうか? 試しに <script language="JavaScript"> <!-- var Src_File = "Data.js";  src=Src_File; //--> </script> と記述しても、エラーとなってしまいました。 変数を使いたい理由は、ラジオボタン等を使って、参照する外部ファイルを動的に切り替えたいのです。 よろしくお願いします。

  • stream_get_contentsの代替関数

    あるファイルの文頭18バイトを削除し、その後の部分を保存するスクリプトを考えています。 ======== 例) $fp = fopen("aaa.send","r+"); fread($fp, 18); //18バイト読み飛ばす $data=stream_get_contents ($fp);//PHP5 ftruncate ($fp, 0);//中味の削除 rewind($fp); //ポインタのリセット(巻き戻し) fwrite($fp, $data); ======== しかしながらサーバー環境のPHPが4.3.8のためstream_get_contents関数が使えません。 同じような意味を持つ関数をご存知の方がいらっしゃいましたらご教授願います。

    • ベストアンサー
    • PHP
電磁波の抜き方
このQ&Aのポイント
  • 電磁波の抜き方を知りたい87歳の女性です。新居に引っ越して以来、電磁波による悪影響に困っています。体調が芳しくなくなり、特にノートパソコンやスマートフォンからの電磁波に悩んでいます。裸足で海岸や芝生を歩く方法もあるようですが、近所にはそれらの環境がありません。高価な特殊な機器も信頼できないため、電磁波を抜く方法を教えてほしいです。
  • 電磁波の抜き方は何かありますか?87歳の女性が新居に引っ越して以来、電磁波による影響に悩んでいます。体調が悪く、ノートパソコンやスマートフォンなどの電磁波からの影響が特に気になっています。海岸や芝生を歩く方法もあるそうですが、近所にそれらの場所はありません。高価な特殊な機器もあるようですが、胡散臭く感じ、購入に踏み切れません。電磁波を抜く方法を教えてください。
  • 87歳の女性が電磁波の抜き方を知りたいです。新居に引っ越して以来、電磁波による悪影響に悩んでいます。体がだるくなり、ノートパソコンやスマートフォンを使用していると強い電磁波を感じます。海岸や芝生を歩く方法が電磁波を抜く効果があるそうですが、近所にはそれらの環境がありません。高価な特殊な機器にも興味はありますが、胡散臭いものが多く購入には二の足を踏んでいます。電磁波を抜く方法を教えてください。
回答を見る