私は同時に同じファイルに複数のユーザーが同時に書き込むことができるWebサイトを持っています。私のコードの例は以下の通りです。複数のユーザーがPHPを使用して同じファイルに同時に書き込みます
PHP 5.6.20
<?php
$root=realpath($_SERVER["DOCUMENT_ROOT"]);
$var=time()."|";
echo $var."<br/>";
$filename=$root."/Testing/Testing/test1.txt";
$myfile=fopen($filename,"a");
fwrite($myfile,$var);
fclose($myfile);
$myfile=fopen($filename,"r");
$contents = fread($myfile, filesize($filename));
echo $contents;
fclose($myfile);
?>
私はのI、複数のユーザーが同じファイルを同じファイルに書き込みをしようとしている場合はPHPで、データ破損の可能性があることを読んでコースでは、長期的にはデータの破損を引き起こす可能性のあるコードを持つことは望ましくありません。
私はブラウザ上でほぼ同時に同じコードを実行しようとしましたが、同時に複数のユーザーが同じファイルに書き込むのをシミュレートしました。エラーが発生したり、書き込み中のファイルにデータが破損したりしませんでした。しかし、私はまだ将来のデータ破損についてはわかりません。
私はflockを使って2人のユーザーが同時にファイルに書き込めないことを確認しましたが、上記のコードをテストしてデータ破損が発生していないため、私のコードをflockで更新するか、まるでそのままにしておいてください。
私の質問は以下のとおりです。
1)は、それはへの書き込みのファイルを破損、上記のコードのいずれかの可能性はありますか?
2)そうなら、flockを使用してこの問題を解決しますか?はいの場合、私は上記のコードで群を実装する必要がありますか?
編集:
私はこの不確実性は、データベースを使用することによって解決することができることを知っているが、このような場合のために、それはDBを使用するので、私を提案しないでください、プレーンテキストを使用することをお勧めします。
ありがとうございます。
このコードは、ファイルを破損させる可能性があります。あなたはファイルに追加しているので、大丈夫かもしれません。これをログファイルとして使用している場合は、問題ありません。 flockを使用すると、コードが待機し、そのコードを使用しているユーザーに遅延が発生します。 – ryantxr
ファイルに追加しているため、大丈夫かもしれません。それは大丈夫じゃないの? "w"でファイルに書き込むときです。私はそれを試したので、データの破損もありませんでした。 –
ユーザーが代わりにデータベースに書き込めない理由はありますか?ファイルは読み込みに適しています(インクルードなどを介して)が、あなたが正しいです、あなたは権利中に競合する可能性があります。それはデータベースでも解決されないかもしれません。たとえば、古いMyISAMテーブルタイプでMySQLを使用する場合です。しかし、InnoDBに固執すれば、あなたはすべて設定されます。だから、あなたが最初にファイルを選択する理由が不思議です。あなたの質問を解決しないで申し訳ありません。 –