我通过FCGI运行PHP --也就是说,我的web服务器生成了几个PHP进程,它们一直运行到大约10,000个请求,直到它们被回收为止。
我的问题是--如果我的PHP脚本顶部有一个$mysqli->connect,那么在我即将结束运行脚本时,是否需要调用$mysqli->close呢?
由于process已经打开了很长时间,所以我会想象每个$mysqli->connect都会泄漏1连接,因为进程一直在运行,没有人关闭连接。
我的想法对不对?我应该打电话给$mysqli->close吗
发布于 2014-10-10 01:13:14
当PHP退出时,它会优雅地关闭数据库连接。
使用close方法的唯一原因是,当您想要终止不再使用的数据库连接时,您有很多事情要做:比如处理和流数据,但是如果这样做很快,就可以忘记close语句。
把它放在脚本的末尾意味着冗余,没有性能或内存增益。
发布于 2014-10-22 23:21:45
在更多细节中,特别是关于FastCGI:
FastCGI使PHP处理在请求之间运行。FastCGI擅长通过利用服务器的可用内存将PHP脚本保存在内存中来减少CPU的使用,而不必为每个PHP请求启动一个单独的process。
发布于 2014-10-24 02:45:42
FastCGI将启动一个主进程,并且该主进程的分支数量与您定义的一样多,是的,那些分叉的进程可能会存在很长一段时间。这实际上意味着流程不必在每次执行脚本时启动完整的PHP进程。但是,您并不认为您的脚本现在一直在运行。每次执行脚本时,仍然有一个启动和关闭阶段。此时,填充全局变量(例如$_POST和$_GET)等。您可以在每次进程通过register_shutdown_function()关闭时执行函数。
如果您没有使用持久数据库连接,也没有关闭数据库连接,那么不会发生任何不好的事情。正如Colin所解释的,PHP最终将在关机期间关闭它们。
尽管如此,我仍然强烈鼓励您关闭连接,因为正确构建的程序知道对象的生存期何时结束,并清理其自身。它可能给你准确的毫秒,或纳秒,你需要及时交付一些东西。
简单地说,总是创建自包含的对象,这些对象在完成它们所做的事情之后也会进行清理。
https://stackoverflow.com/questions/26290405
复制相似问题