PHP 阅读时锁定文件 - flock() 使我的文件空白
PHP Lock file while reading - flock() makes my file blank
正如您在下面的代码中看到的那样,我正在尝试使用 flock 来防止其他客户端访问 php(实际上多个用户每秒将访问此内容大约 10 次,每个) ,正如我在这里搜索时发现的那样......但这不起作用。我的 data.txt 每次这样做都会变得一片空白。
<?php
$fileName = $_GET["room"]."/data.txt";
function replaceLine($data){
if (stristr($data, $_GET["player"])){
return $_GET["player"]." ".$_GET["data"]."\n";
}
return $data;
}
$file = fopen($fileName,"r");
if (flock($file, LOCK_EX)){
//ftruncate($file, 0);
///--------------
$data = file($fileName);
$data = array_map("replaceLine", $data);
file_put_contents($fileName, implode('', $data));
echo fread($file, filesize($fileName)+1);
///--------------
fflush($file);
flock($file, LOCK_UN);
} else {
echo "wait";
}
fclose($file);
?>
这是原始代码(我试图修改它以防止文件为空):(它可以正常工作,但是文件有问题...)
<?php
$fileName = $_GET["room"]."/data.txt";
function replaceLine($data){
if (stristr($data, $_GET["player"])){
return $_GET["player"]." ".$_GET["data"]."\n";
}
return $data;
}
$data = file($fileName);
$data = array_map("replaceLine", $data);
file_put_contents($fileName, implode('', $data));
$file = fopen($fileName,"r");
echo fread($file, filesize($fileName)+1);
fclose($file);
?>
很抱歉问这个新手问题,但我不知道如何解决这个问题,我已经搜索并尝试了数周的不同方法!谢谢!
您正以只读方式打开文件,然后试图写入同一文件。尝试将 fopen 参数设置为 read/write.
$file = fopen($fileName,"r+");
我也会使用 fwrite() 而不是 file_put_contents(),因为您已经有了文件指针,再次打开它可能会被锁拒绝。
正如您在下面的代码中看到的那样,我正在尝试使用 flock 来防止其他客户端访问 php(实际上多个用户每秒将访问此内容大约 10 次,每个) ,正如我在这里搜索时发现的那样......但这不起作用。我的 data.txt 每次这样做都会变得一片空白。
<?php
$fileName = $_GET["room"]."/data.txt";
function replaceLine($data){
if (stristr($data, $_GET["player"])){
return $_GET["player"]." ".$_GET["data"]."\n";
}
return $data;
}
$file = fopen($fileName,"r");
if (flock($file, LOCK_EX)){
//ftruncate($file, 0);
///--------------
$data = file($fileName);
$data = array_map("replaceLine", $data);
file_put_contents($fileName, implode('', $data));
echo fread($file, filesize($fileName)+1);
///--------------
fflush($file);
flock($file, LOCK_UN);
} else {
echo "wait";
}
fclose($file);
?>
这是原始代码(我试图修改它以防止文件为空):(它可以正常工作,但是文件有问题...)
<?php
$fileName = $_GET["room"]."/data.txt";
function replaceLine($data){
if (stristr($data, $_GET["player"])){
return $_GET["player"]." ".$_GET["data"]."\n";
}
return $data;
}
$data = file($fileName);
$data = array_map("replaceLine", $data);
file_put_contents($fileName, implode('', $data));
$file = fopen($fileName,"r");
echo fread($file, filesize($fileName)+1);
fclose($file);
?>
很抱歉问这个新手问题,但我不知道如何解决这个问题,我已经搜索并尝试了数周的不同方法!谢谢!
您正以只读方式打开文件,然后试图写入同一文件。尝试将 fopen 参数设置为 read/write.
$file = fopen($fileName,"r+");
我也会使用 fwrite() 而不是 file_put_contents(),因为您已经有了文件指针,再次打开它可能会被锁拒绝。