我在实例化(?)PHPMailer类时遇到问题。只有当我在处理邮件功能的页面开头require
作曲家的vendor/autoload.php
时,我才能让它工作。
首先,这是我的目录结构:
root
├─ www
│ ├─ includes
│ │ ├─ headers.php
│ │ └─ mail.php
│ └─ index.php
└─ vendor
├─ composer
│ ├─ ...
│ └─ ...
├─ phpmailer
│ ├─ ...
│ └─ ...
└─ autoload.php
文件index.php
开头为:
<?php
require (__DIR__.'/includes/headers.php');
?>
文件includes/headers.php
开头为:
<?php
require (__DIR__.'/../../vendor/autoload.php');
。然后继续设置时区和错误报告等内容。
我有一个关于index.php
的联系表格,它通过ajax向includes/mail.php
提交POST数据。
mail.php
看起来像这样:
<?php
validate_post_data();
function validate_post_data() {
// Checks POST data is OK, then calls another
// function to send the mail using PHPMailer
if ($valid) {
send_mail ($name, $email, $message);
} else {
return "Error with POST data";
}
}
function send_mail($name, $email, $message) {
$mail = new 'PHPMailer;
...
$mail->send();
}
?>
这将产生以下错误:
PHP message: PHP Fatal error: Class 'PHPMailer' not found in /srv/www/example.com/www/includes/mail.php
只有require(__DIR__.'/../../vendor/autoload.php')
放在文件mail.php
的开头,我才能使脚本工作。
有没有更好的正确方法来实现这一目标?
谢谢。
您可以在邮件.php脚本中要求标头.php。我认为当您的 post 请求到达脚本邮件.php时,它不知道在索引.php中已经完成了自动加载。