2012-11-04 4 views
0

일부 값을 저장하는 파일이 있습니다. 사용자는 해당 파일에 항목을 추가 할 수 있으며 해당 파일의 카운터가 업데이트됩니다. 그러나 두 명의 사용자가 파일을 열면 동일한 카운터 ($arr['counter'])가 표시됩니다. 어떻게해야합니까? 어쩌면 한 사용자에 대해 파일을 잠그고 카운터를 업데이트 한 후 잠금을 해제하고 파일에 물건을 다시 추가 할 수 있습니까? 또는 일단 PHP가 열리면 파일을 잠그므로 걱정할 필요가 없습니다.읽기 및 쓰기 중 파일 잠금

$handle = fopen($file, 'r'); 
    $contents = fread($handle, filesize($file)); 
    fclose($handle);  

    $arr = json_decode($contents); 

    //Add stuff here to $arr and update counter $arr['counter']++ 

    $handle = fopen($file, 'w'); 
    fwrite($handle, json_encode($arr)); 
    fclose($handle);  
+1

이 일반적으로 시퀀스와 함께 할 수 있었던 물건의 종류는 다음과 같습니다 여기에 내 현재 코드입니다 관계형 데이터베이스의 객체. – Wyzard

답변

0

PHP는 예를 들어, 그것을 쓰기 전에 파일을 잠글 것 flock 기능을 가지고,

$handle = fopen($file, 'r'); 
$contents = fread($handle, filesize($file)); 
fclose($handle);  

$arr = json_decode($contents); 

//Add stuff here to $arr and update counter $arr['counter']++ 

$handle = fopen($file, 'w'); 
if(flock($handle, LOCK_EX)) 
{ 
    fwrite($handle, json_encode($arr)); 
    flock($handle, LOCK_UN);   
} 
else 
{ 
    // couldn't lock the file 
} 
fclose($handle); 
+0

두 사용자 모두에게 동일한 카운터를 갖고 싶지 않기 때문에 파일을 읽기 전에 잠글 필요가 있습니다. –

+0

@hey 더 좋은 방법 (읽기 : 데이터베이스)이 있기 때문에이 바보 같이 여기는 것이 좋겠지 만, 잠금을 획득해야하는시기 (동기화가 발생해야하는시기는 물론)를 정말로보고 싶다면 읽기 SQLite 잠금 설명서. –

+0

@pst : 왜 끔찍한가요? –