在我看来,一个网络应用程序不断运行;因此,我对文档页面感到困惑,这些页面谈论PHP脚本的“结尾”(例如this one)。这样的引用似乎指的是每个Web请求的结束,但是如果脚本在那里结束,并不意味着操作系统必须为每个请求设置一个全新的进程?这看起来不太可能,因为旋转一个全新的流程是昂贵的,并且整个网站的效率非常低。PHP脚本何时结束?
2
A
回答
6
这里有一个区别:PHP不是一个Web服务器。因此,PHP脚本的结尾与Web服务器的实际结束(或至少大部分时间)无关。
连续运行的Web服务器软件(如IIS,Apache或Lighttpd)可以执行PHP脚本而不会自行结束。这些脚本,在末尾做停止运行。 Web服务器如何为脚本设置执行环境取决于采取的方法。例如,Apache 2确实可以为每个Web请求产生一个子进程,尽管它每次都不会再设置整个Web服务器:有一个主进程命令子进程执行设置和参数。
因此,PHP脚本在Web请求结束时结束;也就是说,当脚本到达一条使其停止的语句(如致命错误,exit
语句等)或到达脚本源的实际结尾时。
编辑关于产卵的新要求新过程的效率。
如今,服务器不会为PHP本身产生一个单独的进程:它们使用PHP库来嵌入语言并使用它。但是,服务器确实可以为每个接收到的HTTP请求生成一个进程。 Apache使用它的mpm_prefork
模块。
虽然产生一个新的进程的确是昂贵的,它比脚本本身的成本,这可能要持续10分之秒,这是很多,不仅仅是产卵过程更加的时候可能什么都没有。
此外,服务器通常必须一次为多个客户端服务;因此,按顺序处理每个请求是不可想象的。它们必须同时运行,并且实现者有两个选择:线程或进程。 PHP在许多平台上都不是线程安全的,通常最好是在单独的进程中运行它。
3
是的,这是实际发生的事情,每个请求。这是PHP的本质。
相关问题
- 1. PHP脚本过早结束
- 2. PHP脚本过早结束
- 3. 脚本结束
- 4. 结束Python脚本
- 5. PHP结束脚本执行全自动
- 6. 在PHP脚本中意外的$结束?
- 7. 脚本在error.log结束时停止
- 8. 会话结束时运行脚本
- 9. Bash脚本,阅读结束脚本?
- 10. PHP中的MySQL:脚本结束时关闭连接?
- 11. PHP脚本在没有错误的情况下超时结束
- 12. PHP脚本结束时将数据写入日志文件
- 13. 当PHP脚本结束时自动刷新ob_start()
- 14. 脚本立即结束
- 15. 脚本在UserDialog上结束
- 16. 脚本提前结束?
- 17. 将Python脚本作为启动脚本运行时结束?
- 18. 如何在不结束php脚本的情况下显示ajax结果? jquery - PHP
- 19. 为什么PHP脚本在任何echo/output之前等待“结束脚本”?
- 20. 如何结束脚本标记?
- 21. 为什么我的脚本在outpitong结果之前结束PHP
- 22. PHP:如何在脚本结束之前显示页面?
- 23. php脚本20分钟后结束,windows server php 5.3
- 24. 在PHP脚本结束之前PHP向用户返回输出
- 25. 如何在Magento订单流程结束时执行脚本?
- 26. 如何在从cygwin运行时结束s Powershell脚本
- 27. 如何在xfce会话结束时执行脚本
- 28. 如何在功能完成时结束脚本?
- 29. 如何在单击链接时停止切换脚本结束?
- 30. 如何让脚本在执行结束时自动删除?
是的。服务器比你想象的要快得多。 PHP二进制文件保存在内存中,除非它是一个CGI,然后在每个请求中加载一个完整的php进程。 – 2010-04-20 23:27:41