簡體   English   中英

讀取時鎖定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參數設置為讀/寫。

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

我還將使用fwrite()而不是file_put_contents(),因為您已經有了文件指針,並且再次打開它很可能會被鎖拒絕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM