PHP致命错误:Class' PHPMailer'找不到

时间:2016-02-03 15:13:30

标签: php phpmailer

我无法实例化(?)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的开头,我只能让脚本生效。

是否有更好正确的方法来实现这个目标?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以在mail.php脚本中要求headers.php。我想当你的帖子请求到达脚本mail.php时,它不知道在index.php中已经完成了自动加载。