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中检查现有的、持久的SQLite连接_Php_Sqlite_Persistence - Fatal编程技术网

在PHP中检查现有的、持久的SQLite连接

在PHP中检查现有的、持久的SQLite连接,php,sqlite,persistence,Php,Sqlite,Persistence,PHP支持使用持久的SQLite连接。然而,在尝试运行维护脚本(如文件备份)并打开这样的连接时会出现问题。这些脚本可能会在流量较低的时段运行,而不需要不时重新启动服务器 问题是:如何检查当前是否存在SQLite持久连接,而不打开/调用一个连接(从而创建连接) 请参阅:如果您有权访问shell_exec()或者exec您可以运行一个shell命令来检查sqlite进程是否正在使用类似top的东西运行,或者可以使用类似lsof-i-n-P | grep-sqlite的命令来检查sqlite进程是否正

PHP支持使用持久的SQLite连接。然而,在尝试运行维护脚本(如文件备份)并打开这样的连接时会出现问题。这些脚本可能会在流量较低的时段运行,而不需要不时重新启动服务器

问题是:如何检查当前是否存在SQLite持久连接,而不打开/调用一个连接(从而创建连接)


请参阅:

如果您有权访问shell_exec()或者exec您可以运行一个shell命令来检查sqlite进程是否正在使用类似
top
的东西运行,或者可以使用类似
lsof-i-n-P | grep-sqlite
的命令来检查sqlite进程是否正在运行,假设sqlite是进程的名称。

如果使用PDO,您可以在运行维护脚本之前检查处理程序是否为null。这样,您就不会像使用

sqlite\u popen()

如果需要,可以创建与PDO的持久连接:
$handler=newPDO('sqlite:test.db',NULL,NULL,array(PDO::ATTR_persistent=>TRUE))

…然后,您可以在调用维护脚本之前关闭连接,前提是它符合某种计划:

if(!is_null($handler)){
$handler = null;
//run maintenance script, recreate connection once finished
}

最好是grep输入实际SQLite3数据库的名称,但是是的-lsof确实是判断(任何进程)是否已打开文件而不尝试打开它的唯一方法。问题是,如果调用处理程序,它将永远不会为null,因为它是一个持久连接,我相信如果尝试调用处理程序,连接将启动。但这可能不是真的,我们必须对此进行测试。请参阅:@David检查处理程序对象是否为null不会打开连接。我的意思是,如果需要,您可以创建一个与PDO的持久连接:
newPDO('sqlite:test.db',NULL,NULL,array(PDO::ATTR_persistent=>TRUE))…然后您可以在调用维护脚本之前关闭连接,前提是它符合某种计划。您是否会遇到这样的问题:有人打开了连接,然后维护脚本在其他人使用连接时关闭了连接?当您重新创建它时,它们将是连接的新ID,同时使用该连接的其他脚本将中断?通常不会太糟糕,但我认为一些维护脚本可能需要一段时间才能运行。@David在我看来,这只是保持连接打开的一个消极方面。这个问题可能可以通过延迟维护脚本的运行,直到所有用户都断开与数据库的连接来解决。我很喜欢这个讨论,谢谢Dave的意见。这就是主要问题:检查而不创建一个。或者,我正在考虑为脚本运行设置一个瞬时停止(2秒?)窗口。当没有活动连接时。但这可能是一个热门网站的问题。