首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果PHP通过FCGI运行,我应该在每次加载页面后关闭一个连接吗?

问如果PHP通过FCGI运行,我应该在每次加载页面后关闭一个连接吗?
EN

Stack Overflow用户
提问于 2014-10-10 01:11:51
回答 6查看 1.9K关注 0票数 6

我通过FCGI运行PHP --也就是说,我的web服务器生成了几个PHP进程,它们一直运行到大约10,000个请求,直到它们被回收为止。

我的问题是--如果我的PHP脚本顶部有一个$mysqli->connect,那么在我即将结束运行脚本时,是否需要调用$mysqli->close呢?

由于process已经打开了很长时间,所以我会想象每个$mysqli->connect都会泄漏1连接,因为进程一直在运行,没有人关闭连接。

我的想法对不对?我应该打电话给$mysqli->close吗

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-10-10 01:13:14

当PHP退出时,它会优雅地关闭数据库连接。

使用close方法的唯一原因是,当您想要终止不再使用的数据库连接时,您有很多事情要做:比如处理和流数据,但是如果这样做很快,就可以忘记close语句。

把它放在脚本的末尾意味着冗余,没有性能或内存增益。

票数 7
EN

Stack Overflow用户

发布于 2014-10-22 23:21:45

在更多细节中,特别是关于FastCGI:

FastCGI使PHP处理在请求之间运行。FastCGI擅长通过利用服务器的可用内存将PHP脚本保存在内存中来减少CPU的使用,而不必为每个PHP请求启动一个单独的process。

票数 3
EN

Stack Overflow用户

发布于 2014-10-24 02:45:42

FastCGI将启动一个主进程,并且该主进程的分支数量与您定义的一样多,是的,那些分叉的进程可能会存在很长一段时间。这实际上意味着流程不必在每次执行脚本时启动完整的PHP进程。但是,您并不认为您的脚本现在一直在运行。每次执行脚本时,仍然有一个启动和关闭阶段。此时,填充全局变量(例如$_POST和$_GET)等。您可以在每次进程通过register_shutdown_function()关闭时执行函数。

如果您没有使用持久数据库连接,也没有关闭数据库连接,那么不会发生任何不好的事情。正如Colin所解释的,PHP最终将在关机期间关闭它们。

尽管如此,我仍然强烈鼓励您关闭连接,因为正确构建的程序知道对象的生存期何时结束,并清理其自身。它可能给你准确的毫秒,或纳秒,你需要及时交付一些东西。

简单地说,总是创建自包含的对象,这些对象在完成它们所做的事情之后也会进行清理。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26290405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档