[英]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參數設置為讀/寫。
$file = fopen($fileName,"r+");
我還將使用fwrite()而不是file_put_contents(),因為您已經有了文件指針,並且再次打開它很可能會被鎖拒絕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.