我已经多次注意到一些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应该永远不会提供多个请求。
答案 0 :(得分:8)
exit
对Apache进程没有任何作用(它肯定不会杀死一个工人!)。它只是结束PHP脚本的执行并将执行返回到 Apache进程,它将结果发送到浏览器并继续下一个请求。
您摘录的Smarty代码与提供多个请求的PHP进程无关。它只是确保Smarty始终初始化 - 如果PHP脚本可以替代地包含在另一个脚本中或直接访问,则非常有用。
答案 1 :(得分:2)
我认为你的困惑来自于include_once
的用途。 PHP基本上是一个“无共享”系统,没有真正的持久性服务器对象。 include_once
并不代表每个Apache子代表一次,而是每个Web请求一次。
include_once
是解决这个问题的方法。
答案 2 :(得分:1)
即使您没有调用exit,您的PHP脚本仍将终止执行,此时生成的任何HTML都将返回到Web服务器以发送到您的浏览器。
exit关键字允许您向PHP引擎发出信号,表明您的工作已完成,无需进一步处理。
另请注意,退出通常用于错误处理和流量控制 - 将其从包含中删除可能会破坏您的应用程序。