【问题标题】:Is there a way to get the last error in php4有没有办法得到php4中的最后一个错误
【发布时间】:2011-07-01 14:09:46
【问题描述】:

PHP 5 有 error_get_last。有没有办法完全或至少部分复制 PHP4.3 中的相同功能?

【问题讨论】:

    标签: error-handling php4


    【解决方案1】:

    摘自PHP manual(由 php at joert dot net 提供):

    <?php
    if( !function_exists('error_get_last') ) {
        set_error_handler(
            create_function(
                '$errno,$errstr,$errfile,$errline,$errcontext',
                '
                    global $__error_get_last_retval__;
                    $__error_get_last_retval__ = array(
                        \'type\'        => $errno,
                        \'message\'        => $errstr,
                        \'file\'        => $errfile,
                        \'line\'        => $errline
                    );
                    return false;
                '
            )
        );
    
        function error_get_last() {
            global $__error_get_last_retval__;
            if( !isset($__error_get_last_retval__) ) {
                return null;
            }
            return $__error_get_last_retval__;
        }
    }
    ?>
    

    【讨论】:

    • 从答案中了解 create_function 也很有趣。看起来有点恶心。
    【解决方案2】:

    是的,但是你必须做一些编程,你需要附加错误处理程序

    $er_handler = set_error_handler("myErrorHandler");
    

    但在此之前您需要编写“myErrorHandler”

    function myErrorHandler($errNumber, $errString, $errFile, $errLine)
    {
      /*now add it to session so you can access it from anywhere, or if you have class with the static variable you can save it there */
    
     $_SESSION["Error.LastError"] = $errNumber . '<br>' . $errString . '<br>' . $errFile . '<br>' . $errLine;
      }
    

    现在发生错误时可以通过

    if(isset($_SESSION["Error.LastError"]))
      $str = $_SESSION["Error.LastError"];
    

    现在要复制您需要创建函数的方法

    function get_last_error()
    {
    $str = "";
    if(isset($_SESSION["Error.LastError"]))
          $str = $_SESSION["Error.LastError"];
    return $str;
    }
    

    【讨论】:

    • +1,我喜欢这个想法,但我认为error_get_last 不会在会话之间持续存在(它只是在当前执行环境的上下文中)。将其存储在全局变量或其他东西中可能更好。
    • error_get_last 在 php 4.3.xx 中不存在,但这是在会话存在时保留最后一个错误的方法。
    • 我是说 REAL error_get_last 仅适用于当前脚本。它不会从一个连接持续到下一个连接。
    • jap,你是对的,但你总是可以在 session_start() 之后设置;取消设置 Error.LastError 所以它只对同一个请求有效。
    • 查看我的回答,注意它只是使用全局变量。
    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 2013-10-12
    • 2020-05-17
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多