我有一个继承的网站,在迁移到新的托管网站并升级到更新的Smarty 2.6.3和PHP 5.6之后一直工作得很好。今天我在一些用户投诉之后做了一些测试,他们没有收到来自网站的电子邮件(会员注册)。
今天开始收到此错误Fatal error: Cannot redeclare class Smarty
。调查显示系统中有两个$temp = new Smarty()
语句 - 一个在用户登录设置Smarty时调用,另一个在类Emailer
中调用,使用phpmailer
。
如果我尝试引用最初的Smarty设置变量,则会出现call to null
错误。如果我删除电子邮件中的智能代码,电子邮件甚至不会被调用。正如我所说,已经工作了好几年......过去一个月没有修改代码......
这是两个模块中的智能初始化:
// Setup.php
require('../Smarty-2.6.30/libs/Smarty.class.php');
$_TEMP = new Smarty();
class Emailer {...
require('../Smarty-2.6.30/libs/Smarty.class.php');
$temp = new Smarty();
...}
电子邮件功能中对Smarty的需求是使用Smarty模板作为电子邮件正文。
答案 0 :(得分:0)
这是一件简单的事情 - 你的问题不在于你是在创建两个Smarty实例,而是在同一个文件上调用InputIterator
两次。这样做:
require
这将解决你的致命错误,但是,你现在可能会遇到一个不同的错误,即你创建的两个实例不是你需要的,但这是一个单独的问题。
虽然我在这里,为什么你在使用古老的Smarty 2.x? 3.x好多了。