调用'exit'的php脚本有什么性能影响?

时间:2009-11-24 21:31:31

标签: php performance

我已经多次注意到一些php脚本退出了。在我看来,这将强制退出httpd / apache子(当然,如果下一个请求需要,将启动另一个)。

但是在CMS中,下一个请求将需要整个init.php初始化,当然只是首先清理并启动php。

似乎php文件通常以

开头
if ( !defined( 'SMARTY_DIR' ) ) {
include_once( 'init.php' );
}

这表明有人想象一个php进程会提供多个请求。但是如果每个脚本都退出,那么每个php / apache进程只会提供一个请求。

关于删除许多退出调用(特别是来自最频繁调用的脚本,如index.php等)的性能和安全影响的任何想法,以允许一个进程提供多个请求?

谢谢,彼得

- ADDENDUM -

感谢您的回答。那个(php永远不会提供多个请求)是我原来的想法,直到上周,当我调试一个只能在一个脚本中设置的配置变量时(因为路径的设置方式)但仍然设置在另一个脚本中(这是在网络服务器上,大约20次点击/秒)。在那种情况下,我没有在一个脚本中设置其配置略有不同的php退出调用。但是,当我将php退出调用添加到那个脚本(在备用目录中)时,这解决了我在主目录中的所有主脚本中遇到的错误配置(这是由于错误地设置了css目录变量,在之前的版本中)页面执行)。所以现在我又感到困惑,因为到目前为止所有的答案都说,php应该永远不会提供多个请求。

3 个答案:

答案 0 :(得分:8)

exit对Apache进程没有任何作用(它肯定不会杀死一个工人!)。它只是结束PHP脚本的执行并将执行返回到 Apache进程,它将结果发送到浏览器并继续下一个请求。

您摘录的Smarty代码与提供多个请求的PHP进程无关。它只是确保Smarty始终初始化 - 如果PHP脚本可以替代地包含在另一个脚本中或直接访问,则非常有用。

答案 1 :(得分:2)

我认为你的困惑来自于include_once的用途。 PHP基本上是一个“无共享”系统,没有真正的持久性服务器对象。 include_once并不代表每个Apache子代表一次,而是每个Web请求一次。

如果你包含两次相同的文件,PHP可能会破解毛球。例如,具有特定名称的函数只能定义一次。这导致人们为每个包含的文件实现一次旧C#ifndef-#define- #include idiom的副本。 include_once是解决这个问题的方法。

答案 2 :(得分:1)

即使您没有调用exit,您的PHP脚本仍将终止执行,此时生成的任何HTML都将返回到Web服务器以发送到您的浏览器。

exit关键字允许您向PHP引擎发出信号,表明您的工作已完成,无需进一步处理。

另请注意,退出通常用于错误处理和流量控制 - 将其从包含中删除可能会破坏您的应用程序。