PHP 致命错误:找不到类“PHPMailer”


PHP Fatal error: Class 'PHPMailer' not found

我在实例化(?)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中已经完成了自动加载。