读取时的PHP锁定文件 - flock()使我的文件空白

时间:2017-09-07 20:30:53

标签: php flock

正如你在下面的代码中看到的那样,我试图使用flock来防止其他客户端访问php(实际上多个用户将每秒执行10次这样的事情),就像我&# 39;我发现在这里搜索......但这不起作用。每次这样做时,我的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);

?>

很抱歉问这个新手问题,但我不知道如何解决这个问题,而且我几周都在搜索和尝试不同的事情!谢谢!

1 个答案:

答案 0 :(得分:1)

您正在打开该文件以进行只读,然后您尝试写入该文件。尝试将fopen参数设置为读/写。

 $file = fopen($fileName,"r+");

我也会使用fwrite()而不是file_put_contents(),因为你已经拥有了文件指针并且再次打开它可能会被锁拒绝。