我无法实例化(?)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将POST数据提交给includes/mail.php
。
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
的开头,我只能让脚本生效。
是否有更好正确的方法来实现这个目标?
谢谢。
答案 0 :(得分:0)
您可以在mail.php脚本中要求headers.php。我想当你的帖子请求到达脚本mail.php时,它不知道在index.php中已经完成了自动加载。