저는 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에서 실행 중입니다.