致命错误:类';PHPMailer\PHPMailer\Exception';在C:\wamp\www\scaffold\PHPMailer master\src\PHPMailer.php第1943行中找不到
我一直在尝试设置一个smtp邮件程序,这样一旦用户在我的网站上填写表单,它就会自动通过电子邮件将消息发送给我。我把PHPmailer的所有文件都放在同一个目录中,但每当提交表单时,它总是给我上述错误 这是PHPmailer.php的第1943行:致命错误:类';PHPMailer\PHPMailer\Exception';在C:\wamp\www\scaffold\PHPMailer master\src\PHPMailer.php第1943行中找不到,php,html,Php,Html,我一直在尝试设置一个smtp邮件程序,这样一旦用户在我的网站上填写表单,它就会自动通过电子邮件将消息发送给我。我把PHPmailer的所有文件都放在同一个目录中,但每当提交表单时,它总是给我上述错误 这是PHPmailer.php的第1943行: throw new Exception($this->lang('authenticate')); 有人知道问题出在哪里吗 谢谢。将代码更改为:抛出新\异常($this->lang('authenticate') 或添加 使用异常到文件的顶部
throw new Exception($this->lang('authenticate'));
有人知道问题出在哪里吗
谢谢。将代码更改为:
抛出新\异常($this->lang('authenticate')代码>
或添加
使用异常代码>到文件的顶部
问题是您正在编辑的文件位于名称空间PHPMailer\PHPMailer中
这意味着当您抛出异常时,它希望类位于同一命名空间中。将代码更改为:throw new\Exception($this->lang('authenticate')代码>
或添加
使用异常代码>到文件的顶部
问题是您正在编辑的文件位于名称空间PHPMailer\PHPMailer中代码>,这意味着当您抛出异常时,它希望该类位于同一命名空间中。您尚未将该类导入到您的命名空间中
如果不这样做,它将期望类具有名称空间。没有
有两种解决办法。添加use语句,或提供完全限定的类名:
<?php
namespace Random;
use Exception;
class Whatever
{
public function whatever()
{
throw new Exception();
}
}
<?php
namespace Random;
class Whatever
{
public function whatever()
{
throw new \Exception();
}
}
您尚未将该类导入命名空间
如果不这样做,它将期望类具有名称空间。没有
有两种解决办法。添加use语句,或提供完全限定的类名:
<?php
namespace Random;
use Exception;
class Whatever
{
public function whatever()
{
throw new Exception();
}
}
<?php
namespace Random;
class Whatever
{
public function whatever()
{
throw new \Exception();
}
}
错误的原因可能是未自动加载类
使用符合PSR的自动加载,您不再需要对所需的每个类文件进行一次require\u
。现在每个人都用作曲家来实现这一点
安装后,要在项目中开始使用Composer,只需一个Composer.json
文件。此文件描述项目的依赖项,并且可能还包含其他元数据
{
"require": {
"phpmailer/phpmailer": "^6.0"
}
}
composer安装
将PHPMailer安装到供应商文件夹中
在应用程序的index.php中,只需添加require_once'vendor/autoload.php代码>
现在,所有类都将加载,而无需输入它们,您的错误将消失 错误的原因可能是您的类没有自动加载
使用符合PSR的自动加载,您不再需要对所需的每个类文件进行一次require\u
。现在每个人都用作曲家来实现这一点
安装后,要在项目中开始使用Composer,只需一个Composer.json
文件。此文件描述项目的依赖项,并且可能还包含其他元数据
{
"require": {
"phpmailer/phpmailer": "^6.0"
}
}
composer安装
将PHPMailer安装到供应商文件夹中
在应用程序的index.php中,只需添加require_once'vendor/autoload.php代码>
现在,所有类都将加载,而无需输入它们,您的错误将消失 另一个名为exception.php的文件中已经包含一个名称空间,如下所示:namespace PHPMailer\PHPMailer;类异常扩展了\Exception{public function errorMessage(){return''.htmlspecialchars($this->getMessage())。“
\n”;}}我可以只放require'Exception.php'吗;在文件的顶部?你是否使用类自动加载程序,如composer?不,我应该吗?目前我只需要以下文件:require(“PHPMailer master/src/PHPMailer.php”);要求(“PHPMailer master/src/SMTP.php”);然后您需要要求每个类,包括异常和PHPMailer可能使用的每个其他类。请参阅我关于自动加载的其他答案。这是前进的道路!!好的,我需要6.0吗,因为那不是我的版本?另一个名为exception.php的文件中已经包含一个名称空间,如下所示:namespace PHPMailer\PHPMailer;类异常扩展了\Exception{public function errorMessage(){return''.htmlspecialchars($this->getMessage())。“
\n”;}}我可以只放require'Exception.php'吗;在文件的顶部?你是否使用类自动加载程序,如composer?不,我应该吗?目前我只需要以下文件:require(“PHPMailer master/src/PHPMailer.php”);要求(“PHPMailer master/src/SMTP.php”);然后您需要要求每个类,包括异常和PHPMailer可能使用的每个其他类。请参阅我关于自动加载的其他答案。这是前进的道路!!好的,我需要6.0版本吗?因为那不是我的版本,“每个人都使用Composer”。并非所有人都关心大型生产环境中的服务器安全性和完整性。我总是不厌其烦地制作一个干净的自动加载器,这样我就不必处理composer
这类垃圾。你永远不应该在生产环境中运行composer可执行文件。它甚至不应该被安装。您可以使用composer在本地使用的库中进行请求,然后将这些文件复制到服务器。那么你只需要给自动装弹机打电话。因此,我认为你的“安全性和完整性”观点没有任何分量。“每个人都使用Composer”。并非所有人都关心大型生产环境中的服务器安全性和完整性。我总是不厌其烦地制作一个干净的自动加载器,这样我就不必处理composer
这类垃圾。你永远不应该在生产环境中运行composer可执行文件。它甚至不应该被安装。您可以使用composer在本地使用的库中进行请求,然后将这些文件复制到服务器。那么你只需要给自动装弹机打电话。所以我看不出你的“安全性和完整性”有什么重要性。