Jindo_Katori
FirstSergeant
			
		Site của mình là: http://tuyhoaplus.com
LIST lỗi mà tới hơn 40000 lỗi.
Nhìn thấy nản luôn
Có tra google về
Fatal Error: Out of memory
Mà không có hướng dẫn nào cụ thể cả
Không biết có cách nào khắc phục không hay phải thuê server khác hở các bác
 ?
		
		
	
	
		
	
	
	
	
		
				
			LIST lỗi mà tới hơn 40000 lỗi.
Nhìn thấy nản luôn
Có tra google về
Fatal Error: Out of memory
Mà không có hướng dẫn nào cụ thể cả
Không biết có cách nào khắc phục không hay phải thuê server khác hở các bác
		Mã:
	
	<?php
/**
* Base template rendering class.
*
* Note that due to a lack of late static binding support, all static properties
* and any method that deals with those properties (via "self", regardless of whether
* it's static or not) must be (re)defined in child classes!
*
* @package XenForo_Core
*/
abstract class XenForo_Template_Abstract
{
    /**
    * Cached template data. Key is the template name; value is the compiled template.
    * All child classes must redefine this property!
    *
    * @var array
    */
    protected static $_templateCache = array();
    /**
    * A list of templates that still need to be loaded. Key is the template name.
    * All child classes must redefine this property!
    *
    * @var array
    */
    protected static $_toLoad = array();
    /**
    * Base path to compiled templates that are stored on disk.
    * All child classes must redefine this property!
    *
    * @var string
    */
    protected static $_filePath = '';
    /**
    * Array of required external resources for this type of template.
    * All child classes must redefine this property!
    *
    * @var array
    */
    protected static $_required = array();
    /**
    * Name of the template to load.
    *
    * @var string
    */
    protected $_templateName;
    /**
    * Key-value params to make available in the template.
    *
    * @var array
    */
    protected $_params = array();
    /**
     * PHP errors generated during template evaluation.
     *
     * @var array
     */
    protected $_templateErrors = array();
    /**
     * The ID of the language that templates will be retrieved from.
     *
     * @var integer
     */
    protected static $_languageId = 0;
    /**
    * Constructor
    *
    * @param string Template name
    * @param array  Key-value parameters
    */
    public function __construct($templateName, array $params = array())
    {
        XenForo_CodeEvent::fire('template_create', array(&$templateName, &$params, $this), $templateName);
        $this->_templateName = $templateName;
        $this->preloadTemplate($templateName);
        if ($params)
        {
            $this->setParams($params);
        }
    }
    /**
     * Creates a new template object of the current type. Mainly helpful
     * if an event only has the current template object in scope.
     *
     * @param string $templateName
     * @param array $params
     *
     * @return XenForo_Template_Abstract
     */
    public function create($templateName, array $params = array())
    {
        $class = get_class($this);
        return new $class($templateName, $params);
    }
    /**
     * Sets the language ID that templates will be retrieved from.
     *
     * @param integer $languageId
     */
    public static function setLanguageId($languageId)
    {
        self::$_languageId = intval($languageId);
    }
    /**
    * Add an array of params to the template. Overwrites parameters with the same name.
    *
    * @param array
    */
    public function setParams(array $params)
    {
        $this->_params = ($this->_params ? XenForo_Application::mapMerge($this->_params, $params) : $params);
    }
    /**
    * Add a single param to the template. Overwrites parameters with the same name.
    *
    * @param string
    */
    public function setParam($key, $value)
    {
        $this->_params[$key] = $value;
    }
    /**
     * Get all template parameters.
     *
     * @return array
     */
    public function getParams()
    {
        return $this->_params;
    }
    /**
     * Get a single template parameter.
     *
     * @param string
     *
     * @return mixed Null if not found.
     */
    public function getParam($key)
    {
        if (array_key_exists($key, $this->_params))
        {
            return $this->_params[$key];
        }
        return null;
    }
    /**
     * @return string
     */
    public function getTemplateName()
    {
        return $this->_templateName;
    }
    /**
    * Renders the specified template and returns the output.
    *
    * @return string
    */
    public function render()
    {
        $__template = $this->_loadTemplate($this->_templateName);
        if ($__template === '')
        {
            return '';
        }
        XenForo_Phrase::loadPhrases();
        set_error_handler(array($this, 'handleTemplateError'));
        $this->_templateErrors = array();
        $__output = $this->_renderInternal($__template, $__extraData);
        restore_error_handler();
        XenForo_CodeEvent::fire('template_post_render', array($this->_templateName, &$__output, &$__extraData, $this), $this->_templateName);
        if (is_array($__extraData) && !empty($__extraData))
        {
            $this->_mergeExtraContainerData($__extraData);
        }
        if ($this->_templateErrors && XenForo_Application::debugMode())
        {
            if ($this->_usingTemplateFiles())
            {
                $templateCode = file_get_contents($__template);
            }
            else
            {
                $templateCode = $__template;
            }
            $lines = preg_split('/\r?\n/', $__template);
            echo "<div class=\"baseHtml\"><h4>Template Errors: " . htmlspecialchars($this->_templateName) . "</h4><ol>\n";
            foreach ($this->_templateErrors AS $error)
            {
                $contextLine = ($error['line'] > 1 ? $error['line'] - 2 : 0);
                $context = array_slice($lines, $contextLine, 3, true);
                echo "\t<li><i>" . htmlspecialchars($error['error']) . "</i> in " . htmlspecialchars($error['file']) . ", line $error[line]";
                if ($context)
                {
                    echo ": <pre>";
                    foreach ($context AS $lineNum => $contextLine)
                    {
                        echo ($lineNum + 1) . ": " . htmlspecialchars($contextLine) . "\n";
                    }
                    echo "</pre>";
                }
                echo "</li>\n";
            }
            echo "</ol></div>\n\n";
        }
        return $__output === null ? '' : $__output;
    }
    /**
     * Internal template rendering.
     *
     * @param string $__template Template text or name of template file
     * @param array $__extraData Returned extra data from the render
     *
     * @return string Rendered template
     */
    protected function _renderInternal($__template, &$__extraData)
    {
        $__params = $this->_params; // special variable for dumping purposes
        extract($this->_params);
        $__output = '';
        $__extraData = array();
        if ($this->_usingTemplateFiles())
        {
            if (file_exists($__template))
            {
                include($__template);
            }
        }
        else
        {
            eval($__template);
        }
        return $__output;
    }
    /**
     * Calls the specified template hook event.
     *
     * Params passed by template explicitly will respect mappings and greater context.
     * Raw params are still available via the template object.
     *
     * @param string $name Name of the hook
     * @param string $contents Contents of the hook; may be empty
     * @param array $params List of params to pass specifically; these will respect mappings.
     *
     * @return string New version of the contents (could be modified)
     */
    public function callTemplateHook($name, $contents, array $params)
    {
        XenForo_CodeEvent::fire('template_hook', array($name, &$contents, $params, $this), $name);
        return $contents;
    }
    /**
     * Calls the specified template callback.
     *
     * @param string|object $class
     * @param string $method
     * @param string $contents Contents (children) of the callback; may be empty
     * @param array $params List of params to pass specifically; these will respect mappings.
     *
     * @return string New version of the contents (could be modified)
     */
    public function callTemplateCallback($class, $method, $contents, $params)
    {
        $call = true;
        if (!is_object($class))
        {
            $className = $class = strval($class);
            if (!class_exists($class))
            {
                $call = 'Class missing';
            }
        }
        else
        {
            $className = get_class($class);
        }
        $method = trim(strval($method));
        if (!is_callable(array($class, $method)))
        {
            $call = 'Not callable';
        }
        else if (!preg_match('/^(get|is|has|render|view|return|print|show|display)/i', $method))
        {
            $call = 'Method does not match prefix: get, is, has, render, view, return, print, show, display';
        }
        if ($call === true)
        {
            ob_start();
            $contents = call_user_func(array($class, $method), $contents, $params, $this);
            $contents .= ob_get_contents();
            ob_end_clean();
        }
        else
        {
            $contents .= "\nCould not execute callback $className::$method() - $call.\n";
        }
        return $contents;
    }
    /**
     * Error handler that traps errors in templates.
     *
     * @param integer $errorType Type of error (one of the E_* constants)
     * @param string $errorString
     * @param string $file
     * @param integer $line
     */
    public function handleTemplateError($errorType, $errorString, $file, $line)
    {
        if ($errorType == E_NOTICE)
        {
            return;
        }
        if ($errorType & error_reporting())
        {
            $this->_templateErrors[] = array(
                'type' => $errorType,
                'error' => $errorString,
                'file' => $file,
                'line' => $line
            );
        }
    }
    /**
    * Gets required external resources as HTML for use in a template directly.
    *
    * @param string Type of requirement to fetch
    *
    * @return string Requirements as HTML
    */
    public function getRequiredExternalsAsHtml($type)
    {
        $required = $this->_getRequiredExternals();
        if (empty($required[$type]))
        {
            return '';
        }
        $typeRequired = array_unique($required[$type]);
        switch ($type)
        {
            case 'js':
                return $this->getRequiredJavaScriptAsHtml($typeRequired);
            case 'css':
                return $this->getRequiredCssAsHtml($this->getRequiredCssUrl($typeRequired));
            default:
                return false;
        }
    }
    public function getRequiredExternalsAsJson()
    {
        $required = $this->_getRequiredExternals();
        $output = array();
        foreach ($required AS $type => $externals)
        {
            if ($type == 'js')
            {
                $externals = $this->_processJsUrls($externals);
            }
            foreach ($externals AS $external)
            {
                $output[$external] = true;
            }
        }
        return json_encode($output);
    }
    /**
     * Gets required externals in a structured way. Values will be returned as a list of URLs.
     *
     * @param string $type
     *
     * @return array List of URLs
     */
    public function getRequiredExternals($type)
    {
        $required = $this->_getRequiredExternals();
        if (empty($required[$type]))
        {
            return '';
        }
        $typeRequired = array_reverse(array_unique($required[$type]));
        switch ($type)
        {
            case 'js':
                return $this->_processJsUrls($typeRequired);
            case 'css':
                return array(
                    'stylesheets' => $typeRequired,
                    'urlTemplate' => $this->getRequiredCssUrl(array('__sentinel__'))
                );
            default:
                return false;
        }
    }
    /**
     * Gets the list of required JavaScript files as HTML script tags.
     *
     * @param array $requirements Array of paths to JS files.
     *
     * @return string
     */
    public function getRequiredJavaScriptAsHtml(array $requirements)
    {
        $output = '';
        foreach ($this->_processJsUrls($requirements) AS $requirement)
        {
            $output .= "\t" . '<script src="' . htmlspecialchars($requirement, ENT_COMPAT, 'UTF-8') . '"></script>' . "\n";
        }
        return $output;
    }
    protected function _processJsUrls(array $jsFiles)
    {
        // add version number to each required file
        foreach ($jsFiles AS &$file)
        {
            if (!strpos($file, '_v='))
            {
                $file = $file . (strpos($file, '?') ? '&' : '?') . '_v=' . XenForo_Application::$jsVersion;
            }
        }
        // source XenForo JS from 'js/xenforo/x/' if required
        switch (XenForo_Application::get('options')->uncompressedJs)
        {
            case 1:
                $jsFiles = str_replace('js/xenforo/', 'js/xenforo/full/', $jsFiles);
                break;
            case 2:
                $jsFiles = str_replace('js/xenforo/', 'js/xenforo/min/', $jsFiles);
                break;
        }
        // handle custom JS URL
        return preg_replace('#^js/#', XenForo_Application::$javaScriptUrl . '/', $jsFiles);
    }
    /**
     * Gets the required CSS as an HTML tag. Expected arg is simple a URL.
     *
     * @param string $requirement
     *
     * @return string
     */
    public function getRequiredCssAsHtml($requirement)
    {
        return '<link rel="stylesheet" href="' . htmlspecialchars($requirement) . "\" />\n";
    }
    /**
     * Gets the URL to fetch the list of required CSS templates. Requirements
     * should be a list of CSS templates, not including the trailing ".css".
     *
     * @param array $requirements
     *
     * @return string
     */
    abstract public function getRequiredCssUrl(array $requirements);
    /**
    * Implicit string cast renders the template.
    *
    * @return string
    */
    public function __toString()
    {
        try
        {
            return $this->render();
        }
        catch (Exception $e)
        {
            XenForo_Error::logException($e, false, "Template to string error:");
            XenForo_Error::unexpectedException($e);
        }
    }
    /**
    * Load the named template.
    *
    * @param string Template name
    *
    * @return string Compiled version of the template
    */
    protected function _loadTemplate($templateName)
    {
        if ($template = $this->_loadTemplateFilePath($templateName))
        {
            return $template;
        }
        else if ($template = $this->_loadTemplateFromCache($templateName))
        {
            return $template;
        }
        else
        {
            $this->_loadTemplates();
            return $this->_loadTemplateFromCache($templateName);
        }
    }
    /**
    * Bulk load all templates that are required.
    */
    protected function _loadTemplates()
    {
        $toLoad = $this->getToLoadList();
        if (!$toLoad)
        {
            return;
        }
        $templates = $this->_getTemplatesFromDataSource(array_keys($toLoad));
        if ($templates)
        {
            $this->_mergeIntoTemplateCache($templates);
        }
        $this->_resetToLoadList();
    }
    /**
    * Adds required external for this type of template to be output later.
    *
    * @param string Type of requirement
    * @param string Value for requirement
    */
    public function addRequiredExternal($type, $requirement)
    {
        $existing = $this->_getRequiredExternals();
        $existing[$type][] = $requirement;
        $this->_setRequiredExternals($existing);
    }
    /**
    * Goes to the data source to load the list of templates.
    *
    * @param array Template list
    *
    * @return array Key-value pairs of template titles/compiled templates
    */
    abstract protected function _getTemplatesFromDataSource(array $templateList);
    /**
    * Helper function get the list of templates that are waiting to be loaded.
    *
    * @return array
    */
    abstract public function getToLoadList();
    /**
    * Resets the to load list to empty.
    */
    abstract protected function _resetToLoadList();
    /**
    * Merges key-value pairs of template names/compiled templates into the local template
    * cache.
    *
    * @param array Templates (key: name, value: compiled output)
    */
    abstract protected function _mergeIntoTemplateCache(array $templates);
    /**
    * Non-static method for pre-loading a template.
    *
    * @param string Template name
    */
    abstract protected function _preloadTemplate($templateName);
    /**
    * Loads a template out of the local template cache. If the template does not
    * exist, it will be set to an empty string. This will be overwritten if
    * the template is loaded from the data source.
    *
    * @param string Template name
    *
    * @return string Compiled template
    */
    abstract protected function _loadTemplateFromCache($templateName);
    /**
    * Loads the file path where a template is located in the file system, if
    * templates are being stored in the file system.
    *
    * @param string Template name
    *
    * @param string Empty string (not using file system) or file path
    */
    abstract protected function _loadTemplateFilePath($templateName);
    /**
    * Gets the list of required external resources.
    *
    * @return array
    */
    abstract protected function _getRequiredExternals();
    /**
    * Sets the list of required external resources.
    *
    * @param array
    */
    abstract protected function _setRequiredExternals(array $required);
    /**
     * Merges in extra container data from the template render.
     *
     * @param array
     */
    abstract protected function _mergeExtraContainerData(array $extraData);
    /**
    * Determines whether we are using templates in the file system.
    *
    * @return boolean
    */
    abstract protected function _usingTemplateFiles();
    /**
    * Specify a template that needs to be preloaded for use later. This is useful
    * if you think a render is going to be called before the template you require
    * is to be used.
    *
    * @param string Template to preload
    */
    public static function preloadTemplate($templateName)
    {
        throw new XenForo_Exception('This function must be overridden in a child class.');
    }
    /**
    * Manually sets a template. This is primarily useful for testing.
    *
    * @param string Name of the template
    * @param string Value for the template
    */
    public static function setTemplate($templateName, $templateValue)
    {
        throw new XenForo_Exception('This function must be overridden in a child class.');
    }
    /**
    * Resets the template system state.
    */
    public static function reset()
    {
        throw new XenForo_Exception('This function must be overridden in a child class.');
    }
}
	
			
				Sửa lần cuối: 
			
		
	
								
								
									
	
								
							
							
	
					


![[VNXF 2x] Best Statistics Pro – Thống kê nâng cao, tối ưu hiệu năng cho XenForo 1.1](https://cdn.vnxf.vn/data/assets/logo_alternate/vnxf-2x-best-statistics-pro-m.webp)


