2013-10-25 2 views
1

저는 PHP가 처음이므로 Sqlite3 DB가 지원하는 간단한 스크립트를 작성해야합니다. 이 스크립트는 완벽하게 작동하지만 프로세스 동기화를 처리하는 방법을 파악하려고합니다.PHP/Sqlite3 프로세스 동기화

Sqlite3은 일반적인 서버 DB 모델이 아니므로 DB에 액세스하는 각 프로세스가 파일을 엽니 다. 그래서 동시 요청이 PHP 스크립트에 들어 오면 각각은 DB 파일을 열어 보려고합니다. 따라서 여기에 일종의 동기화가 필요하다고 가정하고 있습니다.

내 초기 생각은 세마포어였습니다. 그러나 다음 코드는 항상 sem_acquire 실패 : 나는 PHP에 새로 온 사람 때문에

if($semaphone = sem_get(112233)) 
{ 
    if(sem_acquire($semaphore)) 
    { 
     if($db = new SQLite3("mydb.sqlite")) 
     { 
      ... 
      $db->close(); 
     } 

     flock($lock, LOCK_UN); 
    } 
} 

내가 sem_acquire 실패 이유를 파악하는 방법을 모르겠어요. PHP가 시스템 V 리소스로 컴파일되지 않을 수도 있습니다.

다음으로 나는 양떼를 사용하기로 결정했습니다. 다음 코드를 시도했지만 작동하지 않습니다. 나는 시도하고 내 PHP 스크립트에 액세스 할 때 내가 다시 아무것도 얻을 수 없다 (내 스크립트가 실행하지 않는 경우로, 또는 아마도 충돌) :

if($lock = fopen("abc123", "w+")) 
{ 
    if(flock($lock, LOCK_EX)) 
    { 
     if($db = new SQLite3("mydb.sqlite")) 
     { 
      ... 
      $db->close(); 
     } 

     flock($lock, LOCK_UN); 
    } 
} 

제발이 사람이를 동기화하는 방법을 말해 경우, 또는 수 동기화 심지어 필요한거야?

현재,이 모든 것은 우분투 12.04/nginx 및 php5-fpm에서 실행 중입니다.

답변

관련 문제