调用fastCGI的exit()函数时出错?

时间:2011-07-24 07:20:03

标签: php fastcgi exit

我一直在读人们在运行fastCGI时在php脚本中使用exit函数时遇到问题

https://serverfault.com/questions/84962/php-via-fastcgi-terminated-by-calling-exit

http://php.net/manual/en/function.exit.php

“应该注意的是,如果构建一个在FastCGI上运行的站点,则调用exit将在服务器的日志文件中生成错误。这很快就会填满。”

但是,即使我配置了fastCGI,运行此简单脚本后我的错误日志也没有报告此问题:

<?php
$num=2;

if($num==2){
    exit();
}
?>

在配置fastCGI的同时使用退出功能是否安全?在php中有退出函数的替代方法吗?

编辑:我正在使用exit()函数表单表单验证(即如果表单是有效的退出,如果没有将所有发布的变量解析到文本字段中。)

2 个答案:

答案 0 :(得分:2)

使用exit()有一些合理的理由与die()相同。一个例子是遵循标题位置:重定向。

表单验证不是使用die()的地方。构造代码,以便利用返回值的方法来利用函数或类,并使用分支逻辑。

就fastcgi而言,如果在不应该达到代码的情况下适当地使用exit,那么这些情况将是非典型的,并且一些日志消息应该不是问题。填写日志文件似乎是一个非常愚蠢的理由,不做某事 - 一个活跃的网络服务器记录每个请求,没有人认为你不应该有一个网络日志。

答案 1 :(得分:2)

exit() man page上发布的exit()有一个非常好的替代方案 “dexen dot devries at gmail dot com”:

  

如果你想避免按照评论在FastCGI中调用exit()   下面,但真的,积极地希望从嵌套中彻底退出   函数调用或包含,考虑以Python方式执行:

     

定义一个名为`SystemExit'的异常,抛出它而不是调用   exit()并使用空处理程序在index.php中捕获它以完成   脚本执行干净。

<?php

// file: index.php
class SystemExit extends Exception {}
try {
   /* code code */
}
catch (SystemExit $e) { /* do nothing */ }
// end of file: index.php

// some deeply nested function or .php file    

if (SOME_EXIT_CONDITION)
   throw new SystemExit(); // instead of exit()

?>