【问题标题】:Errors when calling exit() function for fastCGI?为 fastCGI 调用 exit() 函数时出错?
【发布时间】:2011-07-24 07:20:02
【问题描述】:

我一直在读到人们在运行 fastCGI 时在他们的 php 脚本中使用退出函数时会遇到问题

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函数有什么替代方法吗?

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

【问题讨论】:

    标签: php fastcgi exit


    【解决方案1】:

    使用与 die() 相同的 exit() 有几个正当理由。一个示例是跟随标头 Location: redirect。

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

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

    【讨论】:

    • 相对于非法用途?
    【解决方案2】:

    exit() 有一个非常好的替代品,由 exit() man page 发布 “gmail dot com 的 dexen dot devries”:

    如果您想避免按照 cmets 在 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()
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多