我正在迁移一个基于Smarty的网站,我试图满足所有的先决条件,这样就不会有任何问题,但是(“总是”我可能会添加)我有这个问题,安装后所有的必要的软件包网站不起作用(浏览器中有HTTP 500错误)我在错误日志中发现了这个错误:
PHP致命错误:在第47行的/var/www/vhosts/placeholder.com/httpdocs/includes/sysplugins/smarty_internal_templatebase.php中的非对象上调用成员函数createTemplate()
这实际上出现在index.php文件中,我有这段代码
$smarty = new SmartyEC($page->template);
$smarty->display('index.tpl');
问题在于在某处显示索引模板,但我无法弄清楚原因。
为了提供更多上下文,我的构造函数如下所示:
<?php
require 'Smarty.class.php';
class SmartyEC extends Smarty{
function SmartyEC()
{
function __construct()
{
parent::__construct();
$appname ='website';
$path= Utils::getTemplatesPath();
$this->caching = false;
}
}
}
?>
服务器有PHP 5.3.2。已安装并安装了最新版本的Smarty。我检查了配置路径并相应地更改了它们以及文件包含。
提前谢谢!
更新#1
我也试过删除这样的函数定义:
class SmartyEC extends Smarty {
public function __construct()
{
parent::__construct();
$appname ='website';
$path= Utils::getTemplatesPath();
$this->caching = false;
}
}
但错误现在变为:
未捕获的异常'SmartyException',消息'无法加载 模板文件'index.tpl'' /var/www/vhosts/website/httpdocs/includes/sysplugins/smarty_internal_templatebase.php:127\nStack 追踪:\ n#0 /var/www/vhosts/website/httpdocs/includes/sysplugins/smarty_internal_templatebase.php(374): Smarty_Internal_TemplateBase-&gt; fetch('index.tpl',NULL,NULL,NULL, true)\ n#1 /var/www/vhosts/website/httpdocs/index.php(58): Smarty_Internal_TemplateBase-&gt; display('index.tpl')\ n#2 {main} \ n 投入 /var/www/vhosts/website/httpdocs/includes/sysplugins/smarty_internal_templatebase.php 在第127行
更新2
我发现这个主题CodeIgniter + Smarty = Error会出现同样的错误,但与此处的情况不同。更令人感兴趣的是,在另一台服务器上它运行正常,所以我的猜测是有一个配置下降而不是编程问题。
答案 0 :(得分:1)
您确定__construct()
在SmartyEC()
内的嵌套吗? (修辞问题,抱歉)
如果你明确命名了你的函数public
,那么错误就会立刻浮出水面:
class SmartyEC extends Smarty {
public function SmartyEC()
{
public function __construct()
{
parent::__construct();
$appname ='website';
$path= Utils::getTemplatesPath();
$this->caching = false;
}
}
}
给你
Parse error: syntax error, unexpected T_PUBLIC in test.php on line 7
从PHP5开始,我们不再使用class-name-constructors了。我们使用__construct()
。除非您在某处明确地调用$ec = new SmartyEC(); $ec->SmartyEC();
,否则应删除该函数声明:
class SmartyEC extends Smarty {
public function __construct()
{
parent::__construct();
$appname ='website';
$path= Utils::getTemplatesPath();
$this->caching = false;
}
}
另请注意,您的示例调用$smarty = new SmartyEC($page->template);
会传递一个参数 - 一个既不SmartyEC()
也不__construct()
的参数。
答案 1 :(得分:0)
最后我明白了......这是一个由四个因素构成的复杂因素:
$this->allow_php_tag = true;
修复它