※ ChatGPTを利用し、要約された質問です(原文:PHPの勉強として掲示板を作成しているのですが、謎の二重書き込みに出会)
質問:PHPの掲示板で謎の二重書き込みが発生してしまう
このQ&Aのポイント
PHPの勉強として掲示板を作成しているのですが、謎の二重書き込みに出会い躓いています。違う方法を試しても同じ症状が出ます。また、プリント文を挿入すると二重書き込みが起きなかったりすることもあります。解決策を教えてください。
掲示板作成中のPHPで、謎の二重書き込みの問題が発生しています。様々な修正を試しましたが、同じ症状が続いています。また、デバッグのためにプリント文を挿入すると問題が解消されることもあります。どうすれば問題を解決できるでしょうか?
PHPの掲示板作成中に謎の二重書き込みの問題に遭遇しました。試した修正方法では解決せず、プリント文の挿入で症状が変化する状況です。同じような経験をされた方や解決策をご存知の方がいらっしゃいましたら、ご教示ください。
PHPの勉強として掲示板を作成しているのですが、謎の二重書き込みに出会
PHPの勉強として掲示板を作成しているのですが、謎の二重書き込みに出会い躓いています。
下記はテストとして書いた、状況が再現されるソースです。
<?php
$filename = './test.dat';
if($_REQUEST) {
$data = file($filename);
$newdata = "{$_REQUEST['newdata']}\n";
$logfile = @fopen($filename, "r+");
flock($logfile, LOCK_EX);
foreach($data as $value) {
fputs($logfile, $value);
}
fputs($logfile, $newdata);
flock($logfile, LOCK_UN);
fclose($logfile);
}
?>
<html>
<head><title>TEST</title></head>
<body>
<form action="test.php">
<input type="text" name="newdata">
<input type="submit">
</form>
</body>
</html>
5、6行目で
$newdata = "{$_REQUEST['newdata']}\n";
$data[] = $newdata;
とした場合、DATを逆順にして
$newdata = $_REQUEST['newdata'];
$array_unshift = $newdata;
とした場合、また、そこで追加せずに書き込み処理を
$logfile = @fopen($filename, "r+");
while(!feof($logfile)) {
$data[] = fgets($logfile);
}
fputs($logfile,$newdata);
foreach($data as $value) {
fputs($logfile, $value);
}
とした場合、など…どうやってもなぜか同じ症状が出ます。
しかももっと不思議なのは、どこでおかしくなっているのか調べようと思い途中にprint_r($data)を入れると、場所によってはなぜか二重書き込みが起きなかったりするのです。
検索しても同じ状況は見つけられずどうしたものかと悩んでおります。
情報が足りないかもしれませんが、何か気づいた方がいましたら教えてください。よろしくお願いします。
お礼
if($_REQUEST)やmethod="get"がいけないなんて思いもしませんでした(お恥ずかしい)。『形になるまではパラメータが見えている方が分かりやすい』なんて考えた罰ですね。 >fputsの前後で まさにそうです。情報を出し忘れていてすみません。 cyanberryさんの場合は偶然だったのかが気になりますが、解決したので締め切らせていただきます。 お三方ありがとうございました。