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

读取时PHP锁定文件-flock()使我的文件为空,php,flock,Php,Flock,正如您在下面的代码中所看到的,我正试图使用flock来阻止其他客户端访问php(实际上,多个用户将每秒访问php大约10次),正如我在这里搜索发现的那样。。。但这是行不通的。每次执行此操作时,My data.txt都会变为空白 <?php $fileName = $_GET["room"]."/data.txt"; function replaceLine($data){ if (stristr($data, $_GET["player"])){ return $

正如您在下面的代码中所看到的,我正试图使用flock来阻止其他客户端访问php(实际上,多个用户将每秒访问php大约10次),正如我在这里搜索发现的那样。。。但这是行不通的。每次执行此操作时,My 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);

?>

这是原始代码(我试图修改它以防止文件变为空):(它可以按照我的要求工作,但是有这个文件问题…)



很抱歉问这个新手问题,但我不知道如何解决这个问题,我正在搜索和尝试不同的东西几个星期!谢谢

您正在以只读方式打开文件,然后尝试写入同一文件。尝试将fopen参数设置为读/写

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

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

您确认$data不是空的吗?
 $file = fopen($fileName,"r+");