2016-02-03 135 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

相關問題