アンケートのようなシステムを作っています。
ユーザーからの投票データをログに保存するときに、
1.1行ずつ読み込む
2.データの番号とポストされた番号が一致していればデータを+1
3.変数$buffに処理が終わった行をためておく
4.1に戻る
5.全ての行が終わったらまとめて保存($buffを保存)
という流れにしており、1~4はファイルロックして、読み込みおよび書き込みさせています。
例えば
3,あなたの好きな食べ物は?,0,0,0
2,あなたの好きな色は?,0,0,0
1,あなたの好きな車は?,0,0,0
というログデータがあるとして、投票フォームから渡ってきた値をforeach($_POST as $key =>$value)として
$keyとログの先頭の番号が一致していれば$valueにあたるデータを+1しています。
ファイルを保存するときは
$fp=@fopen($log, "w+")
としていますが、これだとログデータが全部消えて0バイトになってしまいます。
$fp=@fopen($log, "r+")
だと、ログデータの後に修正されたデータが追加されて保存されてしまいます。(倍のデータになってしまいます)
直前にセーブする$buffのデータを出力させると正常ですので、fopenのモードが問題だと考えています。
このような場合、どのように処理すればいいのでしょうか。
一度ファイルを消してから保存する方法も考えたのですが、ファイルをロックしながらデータを消す方法がわかりませんでした。
よろしくご教授お願い致します。
No.1ベストアンサー
- 回答日時:
'r+' 読みこみ・書きこみ用にオープンします。
ファイルポインタを ファイルの先頭に置きます。'w+' 読みこみ・書きこみ用でオープンします。ファイルポインタを ファイルの先頭に置き、ファイルサイズをゼロにします。 ファイルが存在しない場合には、作成を試みます。
マニュアルにはこういう風に書いてあります。r+で追加されるのは、ファイルポインタがデータの最後にあるからで(おそらく、その前にデータを読み込んでいるのでしょう)、w+だと消えるのは仕様です。
r+で読んだあとに、書き込み前にrewindしてください。
参考URLのfopenのマニュアルの下の記述の中に、サンプルがいくつかあると思います。英語だけど、ソースは読めると思うので、rewindを検索してみてください。
参考URL:http://www.php.net/manual/ja/function.fopen.php
ご回答ありがとうございます。
素晴らしいです。うまくできました。
めっちゃ感激いたしました。
本当に助かりました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) エクセル 任意の列数で分割する方法 3 2022/07/31 14:58
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
バイナリエディタのつかいかた
-
VBAでDOS-V形式のデータをエク...
-
【python】Excelファイルを読み...
-
VB2010 COMポートからのバイナ...
-
HDDのバイナリイメージの取得方...
-
地熱発電などでいう「バイナリ...
-
バイナリ表示されたデータを小...
-
ビットマップファイル生成(C言...
-
C言語初心者の質問失礼します。
-
どんなプログラムを書いても指...
-
マイクラでPythonのプログラミ...
-
ソースから参照しているOCXの一...
-
jarファイルとjava.exeの関連付...
-
jarの開き方を教えてください。
-
c/c++ ビルドしたにもかかわら...
-
printfだと出力されるのにfprin...
-
フォルダ内の特定 拡張子のファ...
-
xismoについてです!開こうとす...
-
VBA でメモ帳へ保存する際の保...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
ページ読み込み時に自動的にsub...
-
エクセルVBA 2千万行のCSVファ...
-
VBA バイナリ―から文字列にす...
-
エラー:ストリームの終わりを...
-
入力ファイルをバイナリにする利点
-
バイナリエディタのつかいかた
-
MacからWinにファイルを添付す...
-
EOF
-
【python】Excelファイルを読み...
-
C言語の質問です。バイナリ形...
-
画像の保存方法。
-
テキストデータをSQLServerに取...
-
バイナリファイルの比較につい...
-
bitmap画像の保存がうまくいき...
-
なぜデータの整合性を確認する...
-
C言語とシリアル通信の送受信...
-
【Teraterm】filewritelnについて
おすすめ情報