phpMailer 函数中的 New Smarty() 出现致命错误
Posted
技术标签:
【中文标题】phpMailer 函数中的 New Smarty() 出现致命错误【英文标题】:Fatal error with New Smarty() in phpMailer function 【发布时间】:2017-05-26 17:34:02 【问题描述】:我有一个继承的站点,并且在迁移到新的托管站点并升级到更新的 Smarty 2.6.3 和 php 5.6 后一直运行良好。今天我在一些用户抱怨他们没有收到来自网站的电子邮件(会员注册)后进行了一些测试。
今天开始收到此错误Fatal error: Cannot redeclare class Smarty
。调查显示,系统中有两条$temp = new Smarty()
语句——一个在用户登录设置Smarty 时调用,第二个在类Emailer
中使用phpmailer
。
如果我尝试引用初始 Smarty 设置变量,我会收到 call to null
错误。如果我删除电子邮件中的聪明代码,电子邮件甚至不会被调用。正如我所说,几年来一直工作良好......过去一个月代码没有变化......
这是两个模块中的 smarty 初始化:
// 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();
...
emailer功能中Smarty的需要是邮件正文使用Smarty模板。
【问题讨论】:
意识到我应该提到在电子邮件功能中需要 Smarty 是为电子邮件正文使用 Smarty 模板。 上面的代码,来自一个文件? 对不起 - 不。第二个是在一个单独的类文件中,它设置了电子邮件功能(cEmailer.php)。 setup.php 由 index.php 代码调用。 cEmailer 由发送电子邮件的各个模块调用。 【参考方案1】:这是一件简单的事情——你的问题不是你创建了两个 Smarty 实例,而是你在同一个文件上调用了两次 require
。改为这样做:
// Setup.php
require_once('../Smarty-2.6.30/libs/Smarty.class.php');
$_TEMP = new Smarty();
class Emailer ...
require_once('../Smarty-2.6.30/libs/Smarty.class.php');
$temp = new Smarty();
这将解决您的致命错误,但是,您现在可能会遇到一个不同的错误,因为您创建的两个实例可能不是您所需要的,但这是一个单独的问题。
当我在这里时,为什么你使用古老的 Smarty 2.x? 3.x 要好得多。
【讨论】:
我正在使用旧的 smarty,因为这是一个继承的站点,我只是在学习 Smarty 和代码中包含的其他一些库。还没准备好处理升级的结果。从旧版本的 php 和 mysql 升级时遇到了足够的问题。 而且,它有效!非常感谢!以上是关于phpMailer 函数中的 New Smarty() 出现致命错误的主要内容,如果未能解决你的问题,请参考以下文章