Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/Sqlite3进程同步_Php_Sqlite - Fatal编程技术网

PHP/Sqlite3进程同步

PHP/Sqlite3进程同步,php,sqlite,Php,Sqlite,我是PHP新手,我的任务是编写一个由SQLite3DB支持的简单脚本。脚本是完整的,并且可以正常工作,但我正在尝试找出如何处理进程同步 由于Sqlite3不是典型的服务器数据库模型,因此访问数据库的每个进程都会打开文件。因此,如果同时请求进入我的PHP脚本,每个请求都会尝试打开DB文件。因此,我假设这里需要某种同步 我最初的想法是信号灯。但是,以下代码在sem_acquire上始终失败: if($semaphone = sem_get(112233)) { if(sem_acquire(

我是PHP新手,我的任务是编写一个由SQLite3DB支持的简单脚本。脚本是完整的,并且可以正常工作,但我正在尝试找出如何处理进程同步

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

我最初的想法是信号灯。但是,以下代码在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可能不是用SystemV资源编译的

接下来我决定试试flock。我尝试了下面的代码,但不起作用。当我尝试访问我的PHP脚本时,我什么也没有得到(就好像我的脚本没有运行,或者它崩溃了):

请问,谁能告诉我如何同步,或者同步是否必要


顺便说一句,我运行的是Ubuntu 12.04 w/nginx和php5 fpm。不要打扰,SQLite客户端和驱动程序。

不要打扰,SQLite客户端和驱动程序

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

        flock($lock, LOCK_UN);
    }
}