【问题标题】:PHP Lock file while reading - flock() makes my file blank阅读时PHP锁定文件-flock()使我的文件空白
【发布时间】:2017-09-07 20:30:53
【问题描述】:

正如您在下面的代码中看到的那样,我正在尝试使用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);

?>

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

【问题讨论】:

  • 你确认$data不为空了吗?

标签: php flock


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 2017-10-19
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2012-02-28
    相关资源
    最近更新 更多