PHP / Sqlite3进程同步

时间:2013-10-25 21:52:58

标签: php sqlite

我是PHP的新手,我的任务是编写一个由Sqlite3 DB支持的简单脚本。该脚本完整且有效,但我正在试图弄清楚如何处理进程同步。

由于Sqlite3不是典型的服务器数据库模型,因此访问数据库的每个进程都会打开该文件。因此,如果同时请求进入我的PHP脚本,每个人都会尝试打开数据库文件。因此,我假设我需要某种同步。

我最初的想法是信号量。但是,以下代码始终在sem_acquire上失败:

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

        flock($lock, LOCK_UN);
    }
}

由于我是PHP的新手,我不知道如何弄清楚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);
    }
}

请问,有人可以告诉我如何同步这个,或者甚至是否需要同步?

顺便说一下,我正在运行这个都是在Ubuntu 12.04 w / nginx和php5-fpm上运行。

1 个答案:

答案 0 :(得分:1)

不要打扰SQLite客户端和驱动程序handle concurrency natively