2017-09-07 7 views
0

以下のコードでわかるように、私は他のクライアントがphpにアクセスするのを防ぐためにflockを使用しようとしています(実際には複数のユーザーが10私はここで検索したように...しかし、これは動作していません。私のdata.txtはこれを行うたびに空白になっています。PHP読み込み中にファイルをロックする - flock()は私のファイルを空白にします

<?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()すでにファイルポインタと開口部を持っているので、それが再びおそらくロックによって拒否されます。

関連する問題