Вход Регистрация
Файл: sngine-v2.8/Script/includes/libs/Smarty/sysplugins/smarty_internal_errorhandler.php
Строк: 127
<?php

/**
 * Smarty error handler
 *
 * @package    Smarty
 * @subpackage PluginsInternal
 * @author     Uwe Tews
 *
 * @deprecated
Smarty does no longer use @filemtime()
 */
class Smarty_Internal_ErrorHandler
{
    
/**
     * contains directories outside of SMARTY_DIR that are to be muted by muteExpectedErrors()
     */
    
public static $mutedDirectories = array();

    
/**
     * error handler returned by set_error_handler() in self::muteExpectedErrors()
     */
    
private static $previousErrorHandler null;

    
/**
     * Enable error handler to mute expected messages
     *
     */
    
public static function muteExpectedErrors()
    {
        
/*
            error muting is done because some people implemented custom error_handlers using
            http://php.net/set_error_handler and for some reason did not understand the following paragraph:

                It is important to remember that the standard PHP error handler is completely bypassed for the
                error types specified by error_types unless the callback function returns FALSE.
                error_reporting() settings will have no effect and your error handler will be called regardless -
                however you are still able to read the current value of error_reporting and act appropriately.
                Of particular note is that this value will be 0 if the statement that caused the error was
                prepended by the @ error-control operator.

            Smarty deliberately uses @filemtime() over file_exists() and filemtime() in some places. Reasons include
                - @filemtime() is almost twice as fast as using an additional file_exists()
                - between file_exists() and filemtime() a possible race condition is opened,
                  which does not exist using the simple @filemtime() approach.
        */
        
$error_handler = array('Smarty_Internal_ErrorHandler''mutingErrorHandler');
        
$previous set_error_handler($error_handler);
        
// avoid dead loops
        
if ($previous !== $error_handler) {
            
self::$previousErrorHandler $previous;
        }
    }

    
/**
     * Error Handler to mute expected messages
     *
     * @link http://php.net/set_error_handler
     *
     * @param integer $errno Error level
     * @param         $errstr
     * @param         $errfile
     * @param         $errline
     * @param         $errcontext
     *
     * @return bool
     */
    
public static function mutingErrorHandler($errno$errstr$errfile$errline$errcontext)
    {
        
$_is_muted_directory false;
        
// add the SMARTY_DIR to the list of muted directories
        
if (!isset(self::$mutedDirectoriesSMARTY_DIR ])) {
            
$smarty_dir realpath(SMARTY_DIR);
            if (
$smarty_dir !== false) {
                
self::$mutedDirectoriesSMARTY_DIR ] =
                    array(
'file' => $smarty_dir'length' => strlen($smarty_dir),);
            }
        }
        
// walk the muted directories and test against $errfile
        
foreach (self::$mutedDirectories as $key => &$dir) {
            if (!
$dir) {
                
// resolve directory and length for speedy comparisons
                
$file realpath($key);
                if (
$file === false) {
                    
// this directory does not exist, remove and skip it
                    
unset(self::$mutedDirectories$key ]);
                    continue;
                }
                
$dir = array('file' => $file'length' => strlen($file),);
            }
            if (!
strncmp($errfile$dir'file' ], $dir'length' ])) {
                
$_is_muted_directory true;
                break;
            }
        }
        
// pass to next error handler if this error did not occur inside SMARTY_DIR
        // or the error was within smarty but masked to be ignored
        
if (!$_is_muted_directory || ($errno && $errno error_reporting())) {
            if (
self::$previousErrorHandler) {
                return 
call_user_func(
                    
self::$previousErrorHandler,
                    
$errno,
                    
$errstr,
                    
$errfile,
                    
$errline,
                    
$errcontext
                
);
            } else {
                return 
false;
            }
        }
    }
}
Онлайн: 1
Реклама