登录  /  注册

为什么 同个方法中 echo realpath(RUNTIME_PATH); 会产生不同结果?

php中文网
发布: 2016-08-04 09:20:05
原创
1336人浏览过

为什么 同个方法中 echo realpath(RUNTIME_PATH); 会产生不同结果?
为什么 同个方法中 echo realpath(RUNTIME_PATH); 会产生不同结果?

为了能让自定义的错误及异常处理机制能够捕获到致命错误,在thinkphp的fatalError()方法了添加了 trigger_error($e['message']);

<code>// 重新设置错误及异常处理机制
 set_error_handler(array('\Think\ErrorLog','phplog'));
 set_exception_handler(array('\Think\ErrorLog','phplog'));

</code>
登录后复制
登录后复制
<code>// 致命错误捕获
static public function fatalError() {
    Log::save();
    if ($e = error_get_last()) {
        switch($e['type']){
          case E_ERROR:
          case E_PARSE:
          case E_CORE_ERROR:
          case E_COMPILE_ERROR:
          case E_USER_ERROR:
            ob_end_clean();
            // 抛出用户级别错误,让自定义的错误机制(phplog)能够捕获
            trigger_error($e['message']); //自己添加的
            self::halt($e);
            break;
        }
    }
}
</code>
登录后复制
登录后复制

下面是自己的错误机制

<code>    public static function phplog($errno, $errstr = null, $errfile = null, $errline= null) {
        if($errstr === null) {                                                                                          //异常
            $backtrace = array(
                'logType'            =&gt; 'exception',
                'environment'        =&gt; array(
                    'code'           =&gt; $errno-&gt;getCode(),                                                              //异常代码
                    'message'        =&gt; $errno-&gt;getMessage(),                                                        //异常消息
                    'file'           =&gt; $errno-&gt;getFile(),                                                              //异常文件
                    'line'           =&gt; $errno-&gt;getLine(),                                                              //异常行
                    'debugBacktrace' =&gt; $errno-&gt;getTrace()                                                              //异常追踪
                )
            );
        } else if( error_reporting() ) {                                                                                //常规错误
            $backtrace = array(
                'logType'            =&gt;'error',
                'environment'        =&gt; array(
                    'code'           =&gt; $errno,
                    'message'        =&gt; $errstr,
                    'file'           =&gt; $errfile,
                    'line'           =&gt; $errline,
                    'debugBacktrace' =&gt; debug_backtrace()                                                               //错误回溯
                )
            );
        } else {                                                                                                        //"@"错误
            return ;
        }
        $index = iconv('UTF-8', 'UTF-8//IGNORE', $index = &amp;$backtrace['environment']['message']);                       //移除无效字符
        self::formatLog($backtrace);                                                                                    //格式化日志

        $errorLevel = array(                                                                                            //输出日志信息
            0     =&gt; 'Exception',                   //异常
            1     =&gt; 'E_ERROR',                     //致命的运行时错误。错误无法恢复。脚本的执行被中断。
            2     =&gt; 'E_WARNING',                   //非致命的运行时错误。脚本的执行不会中断。
            4     =&gt; 'E_PARSE',                     //编译时语法解析错误。解析错误只应该由解析器生成。
            8     =&gt; 'E_NOTICE',                    //运行时提示。可能是错误,也可能在正常运行脚本时发生。
            16    =&gt; 'E_CORE_ERROR',                //由 PHP 内部生成的错误。
            32    =&gt; 'E_CORE_WARNING',              //由 PHP 内部生成的警告。
            64    =&gt; 'E_COMPILE_ERROR',             //由 Zend 脚本引擎内部生成的错误。
            128   =&gt; 'E_COMPILE_WARNING',           //由 Zend 脚本引擎内部生成的警告。
            256   =&gt; 'E_USER_ERROR',                //由于调用 trigger_error() 函数生成的运行时错误。
            512   =&gt; 'E_USER_WARNING',              //由于调用 trigger_error() 函数生成的运行时警告。
            1024  =&gt; 'E_USER_NOTICE',               //由于调用 trigger_error() 函数生成的运行时提示。
            2048  =&gt; 'E_STRICT',                    //运行时提示。对增强代码的互用性和兼容性有益。
            4096  =&gt; 'E_RECOVERABLE_ERROR',         //可捕获的致命错误。
            8192  =&gt; 'E_DEPRECATED',                //运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。
            16384 =&gt; 'E_USER_DEPRECATED',           //用户产少的警告信息。
            30719 =&gt; 'E_ALL',                       //所有的错误和警告,除了 E_STRICT。
        );
        $temp = htmlentities($index, ENT_QUOTES, 'UTF-8');
        self::writeLog($backtrace, 'php', "<font style="display:block; color:#F00; font-weight:bold;">{$errorLevel[$backtrace['environment']['code']]} : \"<pre style="display: inline;">{$temp}
登录后复制
登录后复制
\" in {$backtrace['environment']['file']} on line {$backtrace['environment']['line']}. Timestamp : {$_SERVER['REQUEST_TIME']}"); } protected static function writelog(&$logData, $logType, $printStr) { self::$lastError['error'] = &$logData; if( APP_DEBUG ) { //debug模式 echo $printStr; //打印日志 } $logPath = RUNTIME_PATH . 'Errorlog' . date('/Y/m/d', $_SERVER['REQUEST_TIME']) . $logType; echo realpath(RUNTIME_PATH); // 结果1.D:\wamp\www\XMQZ\Runtime 结果2.D:\wamp\Apache24\Runtime is_dir($temp = dirname($logPath)) || mkdir($temp, 0777, true); @file_put_contents( $logPath, strtr(serialize($logData), array("\r\n" => ' ' . ($temp = chr(0)), "\r" => $temp, "\n" => $temp)) . "\n", FILE_APPEND | LOCK_EX ); }

回复内容:

为什么 同个方法中 echo realpath(RUNTIME_PATH); 会产生不同结果?
为什么 同个方法中 echo realpath(RUNTIME_PATH); 会产生不同结果?

为了能让自定义的错误及异常处理机制能够捕获到致命错误,在thinkphp的fatalError()方法了添加了 trigger_error($e['message']);

<code>// 重新设置错误及异常处理机制
 set_error_handler(array('\Think\ErrorLog','phplog'));
 set_exception_handler(array('\Think\ErrorLog','phplog'));

</code>
登录后复制
登录后复制
<code>// 致命错误捕获
static public function fatalError() {
    Log::save();
    if ($e = error_get_last()) {
        switch($e['type']){
          case E_ERROR:
          case E_PARSE:
          case E_CORE_ERROR:
          case E_COMPILE_ERROR:
          case E_USER_ERROR:
            ob_end_clean();
            // 抛出用户级别错误,让自定义的错误机制(phplog)能够捕获
            trigger_error($e['message']); //自己添加的
            self::halt($e);
            break;
        }
    }
}
</code>
登录后复制
登录后复制

下面是自己的错误机制

<code>    public static function phplog($errno, $errstr = null, $errfile = null, $errline= null) {
        if($errstr === null) {                                                                                          //异常
            $backtrace = array(
                'logType'            =&gt; 'exception',
                'environment'        =&gt; array(
                    'code'           =&gt; $errno-&gt;getCode(),                                                              //异常代码
                    'message'        =&gt; $errno-&gt;getMessage(),                                                        //异常消息
                    'file'           =&gt; $errno-&gt;getFile(),                                                              //异常文件
                    'line'           =&gt; $errno-&gt;getLine(),                                                              //异常行
                    'debugBacktrace' =&gt; $errno-&gt;getTrace()                                                              //异常追踪
                )
            );
        } else if( error_reporting() ) {                                                                                //常规错误
            $backtrace = array(
                'logType'            =&gt;'error',
                'environment'        =&gt; array(
                    'code'           =&gt; $errno,
                    'message'        =&gt; $errstr,
                    'file'           =&gt; $errfile,
                    'line'           =&gt; $errline,
                    'debugBacktrace' =&gt; debug_backtrace()                                                               //错误回溯
                )
            );
        } else {                                                                                                        //"@"错误
            return ;
        }
        $index = iconv('UTF-8', 'UTF-8//IGNORE', $index = &amp;$backtrace['environment']['message']);                       //移除无效字符
        self::formatLog($backtrace);                                                                                    //格式化日志

        $errorLevel = array(                                                                                            //输出日志信息
            0     =&gt; 'Exception',                   //异常
            1     =&gt; 'E_ERROR',                     //致命的运行时错误。错误无法恢复。脚本的执行被中断。
            2     =&gt; 'E_WARNING',                   //非致命的运行时错误。脚本的执行不会中断。
            4     =&gt; 'E_PARSE',                     //编译时语法解析错误。解析错误只应该由解析器生成。
            8     =&gt; 'E_NOTICE',                    //运行时提示。可能是错误,也可能在正常运行脚本时发生。
            16    =&gt; 'E_CORE_ERROR',                //由 PHP 内部生成的错误。
            32    =&gt; 'E_CORE_WARNING',              //由 PHP 内部生成的警告。
            64    =&gt; 'E_COMPILE_ERROR',             //由 Zend 脚本引擎内部生成的错误。
            128   =&gt; 'E_COMPILE_WARNING',           //由 Zend 脚本引擎内部生成的警告。
            256   =&gt; 'E_USER_ERROR',                //由于调用 trigger_error() 函数生成的运行时错误。
            512   =&gt; 'E_USER_WARNING',              //由于调用 trigger_error() 函数生成的运行时警告。
            1024  =&gt; 'E_USER_NOTICE',               //由于调用 trigger_error() 函数生成的运行时提示。
            2048  =&gt; 'E_STRICT',                    //运行时提示。对增强代码的互用性和兼容性有益。
            4096  =&gt; 'E_RECOVERABLE_ERROR',         //可捕获的致命错误。
            8192  =&gt; 'E_DEPRECATED',                //运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。
            16384 =&gt; 'E_USER_DEPRECATED',           //用户产少的警告信息。
            30719 =&gt; 'E_ALL',                       //所有的错误和警告,除了 E_STRICT。
        );
        $temp = htmlentities($index, ENT_QUOTES, 'UTF-8');
        self::writeLog($backtrace, 'php', "<font style="display:block; color:#F00; font-weight:bold;">{$errorLevel[$backtrace['environment']['code']]} : \"<pre style="display: inline;">{$temp}
登录后复制
登录后复制
\" in {$backtrace['environment']['file']} on line {$backtrace['environment']['line']}. Timestamp : {$_SERVER['REQUEST_TIME']}"); } protected static function writelog(&$logData, $logType, $printStr) { self::$lastError['error'] = &$logData; if( APP_DEBUG ) { //debug模式 echo $printStr; //打印日志 } $logPath = RUNTIME_PATH . 'Errorlog' . date('/Y/m/d', $_SERVER['REQUEST_TIME']) . $logType; echo realpath(RUNTIME_PATH); // 结果1.D:\wamp\www\XMQZ\Runtime 结果2.D:\wamp\Apache24\Runtime is_dir($temp = dirname($logPath)) || mkdir($temp, 0777, true); @file_put_contents( $logPath, strtr(serialize($logData), array("\r\n" => ' ' . ($temp = chr(0)), "\r" => $temp, "\n" => $temp)) . "\n", FILE_APPEND | LOCK_EX ); }
智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号