2016-02-03 115 views
0

我在实例化(?)PHPMailer类时遇到了问题。如果我在require作曲家的vendor/autoload.php处理邮件功能页面的开头,我只能使它工作。PHP致命错误:找不到类'PHPMailer'

首先,这里是我的目录结构:

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

如果你可以通过包含PHPMailer类的文件来获取脚本?嗯? –

+0

我想是的,是的。我只是想:可以找不到类的原因是因为'mail.php'是通过ajax调用的,因此'mail.php'实际上不知道'index.php'包含哪些文件? (我不知道使用什么术语。) – Chris

回答

0

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

+0

....它突然点击!谢谢! – Chris

+0

不用了,谢谢,你可以接受我的回答。 :) – ArrowHead

相关问题