PHP致命错误:找不到类'SmartySecurity'

时间:2019-12-30 22:30:35

标签: php smarty smarty3

在这个旧网站的Smarty 2.6到Smarty 3.1升级任务中,我拉了2个小时。原因是主机现在仅适用于PHP 7。不再需要PHP5。我认为这将是一个1个小时的交易,但它很快就变成了一场噩梦。我记得在2005年使用Smarty时,我再也没有使用过它,但是今天,将近15年后,这个怪物模板引擎让我回味无穷!

这是init PHP文件的内容:

<?php

#Load Smarty library
#require_once("php/Smarty-2.6.26/libs/Smarty.class.php");
#require_once("php/smarty-3.1.34/libs/Smarty.class.php");
require_once("php/smarty-3.1.34/libs/SmartyBC.class.php");
require_once("php/smarty-3.1.34/libs/sysplugins/smarty_security.php");

class class_init extends SmartyBC {

    function __construct(){
        #Init
        parent::__construct();

        #Directories
        $this->template_dir = "skin/".SKIN."/public/";
        $this->compile_dir  = "skin/".SKIN."/compile/";
        $this->config_dir   = "skin/".SKIN."/config/";
        $this->cache_dir    = "skin/".SKIN."/cache/";

        #Caching
        $this->caching          = (boolean)SMARTY_CACHING;
        $this->cache_lifetime   = (int)SMARTY_CACHE_LIFETIME;
        $this->debugging        = true;
    }

    function is_cached($str_tpl, $cache_id = NULL, $compile_id = NULL){
        return $this->isCached($str_tpl, $cache_id, $compile_id);
    }
}

class MySecurity extends SmartySecurity {
    public $secure_dir = array('/home/lesclownsducarro/public_html/'); 

    public function __construct(Smarty $smarty){
        parent::__construct($smarty);
    }
}


?>

这是控制器文件的内容:

require_once("./php/class/init.php");
$_ENV['class_init'] = new class_init();
$securityPolicy = new Smarty_Security($_ENV['class_init']);
$securityPolicy->php_handling = \Smarty::PHP_ALLOW;
$_ENV['class_init']->enableSecurity($securityPolicy);

获取一个完全空白的页面,并且error_log只是指出:

[30-Dec-2019 22:22:40 UTC] PHP Fatal error:  Class 'SmartySecurity' not found in /home/xxxxx/public_html/php/class/init.php on line 32

为了向后兼容,我需要使用SmartyBC,因为模板到处都包含PHP文件。 inb4是的,我知道,这不是我的网站。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

DOH。韦尔普,看来我太累了。

显然应该是:$securityPolicy = new Smarty_Security($_ENV['class_init']);

...带有下划线。我不知道,我是从smarty.net复制/粘贴示例的,根本没有注意。此处显示的“新SmartySecurity”:https://www.smarty.net/forums/viewtopic.php?p=72741

JFC。