• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPの勉強として掲示板を作成しているのですが、謎の二重書き込みに出会)

質問:PHPの掲示板で謎の二重書き込みが発生してしまう

このQ&Aのポイント
  • PHPの勉強として掲示板を作成しているのですが、謎の二重書き込みに出会い躓いています。違う方法を試しても同じ症状が出ます。また、プリント文を挿入すると二重書き込みが起きなかったりすることもあります。解決策を教えてください。
  • 掲示板作成中のPHPで、謎の二重書き込みの問題が発生しています。様々な修正を試しましたが、同じ症状が続いています。また、デバッグのためにプリント文を挿入すると問題が解消されることもあります。どうすれば問題を解決できるでしょうか?
  • PHPの掲示板作成中に謎の二重書き込みの問題に遭遇しました。試した修正方法では解決せず、プリント文の挿入で症状が変化する状況です。同じような経験をされた方や解決策をご存知の方がいらっしゃいましたら、ご教示ください。

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

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

if($_REQUEST)の所為でページにアクセスした時点でfopen以下の処理が実行されてしまっている→2重処理 (これはログファイルをテキストエディタか何かで開いたまま実行すると確認できます) 入れる場所によっては~の下りはfputsの前後で結果が変わっているのでは? 解決方法はPOSTメソッドに変更するのが手っ取り早いです。 送信されるまで実行されないので2重処理もされません。 <form action="test.php" method="post"> <input type="text" name="newdata"> <input type="submit"> if($_POST) { $data = file($filename); $newdata = "{$_POST['newdata']}\n";

noname#141929
質問者

お礼

if($_REQUEST)やmethod="get"がいけないなんて思いもしませんでした(お恥ずかしい)。『形になるまではパラメータが見えている方が分かりやすい』なんて考えた罰ですね。 >fputsの前後で まさにそうです。情報を出し忘れていてすみません。 cyanberryさんの場合は偶然だったのかが気になりますが、解決したので締め切らせていただきます。 お三方ありがとうございました。

その他の回答 (2)

  • cyanberry
  • ベストアンサー率50% (117/230)
回答No.2

No1さんの指摘もその通りなのですが、試しにソースそのままをコピペして実行してみたら、別に2重書き込みになりませんでしたよ。 このソースとは違うものが動いてませんか?

noname#141929
質問者

お礼

回答ありがとうございました。またご縁がありましたらよろしくお願いします。コピペにて失礼ですが改めてお礼いたします。

noname#141929
質問者

補足

回答ありがとうございます。 試しに新しいディレクトリにこのtest.phpとtest.datだけを入れて実行したのですがやはり二重になりました。 本当に質問文に載せた分しかないファイルでアップロードしているので、何がcyanberryさんと違うのかまったく見当が付きません。 回答いただいたのにすみません。

  • hanmemomo
  • ベストアンサー率35% (205/580)
回答No.1

? これって追加書き込みしたいんですか? それとも新規ラインを追加した新しいファイルをつくるんですか? @fopen($filename, "r+"); は @fopen($filename, "a"); なのでは? あと、エラー処理をスキップしているので、受け取りハンドルは厳密にしたほうがいいとおもいます。 今のを整理すると、 先読みの部分は使いません。(必要すらない) function hoge() { -> $filename = './test.dat'; -> if($_REQUEST) { -> -> $logfile = @fopen($filename, "a"); -> -> -> fputs($logfile, $newdata); -> -> fclose($logfile); -> } } こんだけで全部終わるんですが、だめですか?

noname#141929
質問者

お礼

回答ありがとうございました。またご縁がありましたらよろしくお願いします。コピペにて失礼ですが改めてお礼いたします。

noname#141929
質問者

補足

回答ありがとうございます。追加書き込みです。 書き忘れてしまったんですが、"a"とか一度中身を全部配列に入れてから"w"で開いて書き込みとかも実はやりました。やはり二重になってしまいます。 ちなみにもうひとつ書き忘れていたのが、test.phpはこのスクリプト自体ということです。 教えていただいた記述をコピーして実行しましたが、やはり二重になってしまいました。せっかく解答していただいたのにすみません。

関連するQ&A

専門家に質問してみよう