我一直在读人们在运行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()函数表单表单验证(即如果表单是有效的退出,如果没有将所有发布的变量解析到文本字段中。)
答案 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() ?>