0
아래 코드에서 볼 수 있듯이 다른 클라이언트가 PHP를 액세스하지 못하도록 막으려 고합니다 (실제로 여러 사용자가 초당 시간, 각 하나씩), 여기에서 검색을 찾았습니다 ... 그러나 이것은 작동하지 않습니다. 내 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);
?>
이 초보자 질문에 대해 유감스럽게 생각합니다. 그러나이 문제를 해결하는 방법을 모르고 있으며 수 주일 동안 여러 가지를 찾고 있습니다. 감사!
$ 데이터가 비어 있지 않은 것으로 확인하셨습니까? –