gpt4 book ai didi

php - PHP 脚本什么时候结束?

转载 作者:行者123 更新时间:2023-12-02 06:44:14 27 4
gpt4 key购买 nike

在我看来,Web 应用程序是持续运行的东西;因此,我对讨论 PHP 脚本“结束”的文档页面感到困惑(例如 this one )。此类引用似乎指的是每个 Web 请求的结尾,但如果脚本到此结束,是否意味着操作系统必须为每个请求设置一个全新的进程?这似乎不太可能,因为启动一个全新的流程非常昂贵,而且对整个站点来说效率非常低。

最佳答案

这里有一个区别:PHP 不是 Web 服务器。因此,PHP 脚本的结尾与 Web 服务器的实际结尾无关(或者至少在大多数情况下)。

持续运行的 Web 服务器软件,如 IIS、Apache 或 Lighttpd,可以在不结束自身的情况下执行 PHP 脚本。这些脚本最终确实停止运行。 Web 服务器如何为脚本设置执行环境取决于所采用的方法。例如,Apache 2 确实可以为每个 Web 请求生成一个子进程,尽管它不会每次都重新设置整个 Web 服务器:有一个主进程命令子进程执行设置和参数。

因此,PHP 脚本在 Web 请求结束时结束;也就是说,当脚本到达使其停止的语句(如 fatal error 、exit 语句等)或当它到达脚本源的实际结尾时。


编辑关于为新请求生成新进程的效率。

如今,服务器不会为 PHP 本身生成单独的进程:它们使用 PHP 库来嵌入语言并使用它。然而,服务器确实可以自由地为它们收到的每个 HTTP 请求生成一个进程。 Apache 使用它的 mpm_prefork 模块来做到这一点。

虽然生成一个新进程确实很昂贵,但与脚本本身的成本相比可能不算什么,脚本本身可能会持续十分之一秒,这比生成一个进程要多得多.

此外,服务器通常必须同时为许多客户端提供服务;因此,按顺序处理每个请求是不可想象的。它们必须同时运行,这给实现者留下了两个选择:线程或进程。 PHP 在许多平台上都不是线程安全的,通常最好在单独的进程中运行它。

关于php - PHP 脚本什么时候结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2679335/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com