2017-09-07 92 views
0

正如你可以在下面的代碼中看到的,我想用羊羣,以防止其他客戶接取的PHP(實際上有多個用戶接取此類似10每秒一次,每一個),因爲我發現在這裏搜索......但這是行不通的。我的data.txt每次都會變得空白。PHP鎖文件,而閱讀 - 羊羣()使我的檔案空白

<?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); 

?> 

對不起,問這個新手的問​​題,但我沒有想法如何解決這一問題,我搜索和幾個星期嘗試不同的東西!謝謝!

+0

你證實,$的數據是不是空的? –

回答

1

您正在打開該文件的只讀,然後你試圖寫入到同一個文件。嘗試設置fopen參數來讀/寫。

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

我也將使用fwrite()將代替file_put_contents(),因爲你已經有文件指針打開它再次將可能被鎖拒絕。