【发布时间】:2015-05-08 17:06:10
【问题描述】:
我遇到了一些使用exit 的代码,一旦遇到错误就中止处理请求。我不是 PHP 专家,但我的直接反应是,在高层次上了解 FastCGI,这将退出该过程并且通常是一个坏主意。这不是 Nginx 和我当前的 PHP 的情况,而是古老的 Apache 版本,this was a problem。关于 FastCGI 的 PHP 文档是 pretty sparse,但它确实提到了 fastcgi_finish_request,这看起来是完成请求的一种优雅方式。
exit 的文档不清楚它是否对 FastCGI 有任何性能影响,但存在一个细微的区别,即它存在于 脚本,而不是进程。 header 的文档实际上使用了 exit,我在 several Stack Overflow posts 中找到了该模式,但理由是“所以你不发送正文”,而不是“如果你不发送在标头之后发出正文,正文将为空,重定向将按预期工作。”
我还发现conflicting answers 是否会导致问题。那和Dreamhost recommends against exit when using FastCGI(尽管他们的例子是在Perl中)。它肯定会导致问题的一个地方是单元测试。
所以我的问题是:在 PHP 网页中使用 exit 的最佳做法是什么? fastcgi_finish_request 是更好的选择吗?重组控制流会更好吗?人们报告的问题是特定于 Apache 的吗?或者这只是另一个版本的“是多个returns 糟糕的编程习惯?”
【问题讨论】:
-
"重组控制流会更好吗?" 是的;退出是懒惰的。
标签: php apache nginx cgi fastcgi