gpt4 book ai didi

php - 多个用户使用 PHP 同时写入同一个文件

转载 作者:行者123 更新时间:2023-12-02 04:33:40 26 4
gpt4 key购买 nike

我有一个网站,在同一时刻,可以有多个用户同时写入同一个文件。我的代码示例如下。

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);
?>

我在 PHP 中读到,如果多个用户试图在同一个文件中写入同一个文件,则有可能发生数据损坏,我当然不想拥有可能导致长期数据损坏的代码.

我试图在我的浏览器上几乎同时运行上面的代码来模拟多个用户同时写入同一个文件,并且它没有对正在写入的文件产生任何错误或任何数据损坏,但我仍然不确定 future 的数据损坏。

我读到我可以使用 flock 来确保 2 个用户不能同时写入文件,但是由于我测试了上面的代码并且它没有产生数据损坏,我不确定我是否应该更新我的代码蜂拥而至或保持原样。

我的问题是:

1) 上面的代码是否有可能破坏它正在写入的文件?

2) 如果是,使用 flock 会解决这个问题吗?如果是,我应该如何在上面的代码中实现 flock ?

编辑:

我知道这个不确定性可以通过使用数据库来解决,但是对于这种情况,最好使用纯文本,所以请不要建议我使用数据库。

提前致谢。

最佳答案

如果两个脚本同时尝试写入文件。 fopen() 函数在文件上调用时,不会阻止另一个脚本打开同一个文件,这意味着您可能会发现一个脚本正在从一个文件中读取另一个正在写入的脚本,或者更糟的是,两个脚本正在写入该文件同一个文件。所以最好使用 flock() 。
您可以在 http://www.hackingwithphp.com/8/11/0/locking-files-with-flock 上获得更多帮助.
对于您的代码,您可以使用 flock() 作为

<?php
$root=realpath($_SERVER["DOCUMENT_ROOT"]);
$var=time()."|";
echo $var."<br/>";
$filename=$root."/Testing/Testing/test1.txt";

$myfile=fopen($filename,"a");
if (flock($myfile, LOCK_EX)) {
fwrite($myfile,$var);
flock($myfile, LOCK_UN); // unlock the file
} else {
// flock() returned false, no lock obtained
print "Could not lock $filename!\n";
}

fclose($myfile);

$myfile=fopen($filename,"r");
if (flock($myfile, LOCK_EX)) {

$contents = fread($myfile, filesize($filename));
echo $contents;
flock($myfile, LOCK_UN); // unlock the file
} else {
// flock() returned false, no lock obtained
print "Could not lock $filename!\n";
}
fclose($myfile);
?>

关于php - 多个用户使用 PHP 同时写入同一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46016784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com