PHP支持使用SQLite持久连接。然而,在打开这样的连接后,尝试运行维护脚本(如文件备份)时会出现问题。这些脚本可能在低流量时期经常在没有服务器重启的情况下运行。
如何检查是否有当前的SQLite持久连接,而不打开/调用一个(从而创建连接)?
请参阅:php SQLite 持久连接
如何检查是否有当前的SQLite持久连接,而不打开/调用一个(从而创建连接)?
请参阅:php SQLite 持久连接
如果您使用PDO,可以在运行维护脚本之前检查处理程序是否为空。这样,您就不会像使用sqlite_popen()
一样创建连接。
如果需要,可以使用PDO创建持久连接:$handler = new PDO('sqlite:test.db', NULL, NULL, array(PDO::ATTR_PERSISTENT => TRUE));
然后,在调用维护脚本之前,只需关闭连接即可,假设它是按照某种时间表进行的:
if(!is_null($handler)){
$handler = null;
//run maintenance script, recreate connection once finished
}
new PDO('sqlite:test.db', NULL, NULL, array(PDO::ATTR_PERSISTENT => TRUE));
...然后,在维护脚本被调用之前,您可以关闭连接,假设它是按照某种时间表进行的。 - Trevor Arjeskilsof -i -n -P | grep sqlite
这样的命令,假设sqlite
是该进程的名称。引用https://www.php.net/manual/en/features.persistent-connections.php上的手册:
“当请求持久连接时,PHP会检查是否已经存在相同的持久连接(从先前保持打开状态) - 如果存在,则使用它。如果不存在,则创建链接。'相同'的连接是指使用相同的用户名和密码(适用于的情况下),连接到同一主机的连接。”
这似乎意味着在尝试连接之前无需进行先前检查。
请注意,该文章涉及许多有关持久连接与Web服务器协作的考虑因素,特别是关于随后尝试使用连接的进程可能会受到早期错误的故障所阻止的内容,这意味着在Web服务器环境中,由于Web会话可以随时终止,持久连接可能不可靠。
特别是,它建议不要将持久连接用于使用表锁或事务的脚本。