没有邮件类 require_once php

Posted

技术标签:

【中文标题】没有邮件类 require_once php【英文标题】:no Mail class require_once php 【发布时间】:2012-06-27 20:29:37 【问题描述】:

我正在尝试使用 require_once 来调用 Mail.php,但是当我为该类创建一个新实例并开始使用它时,我收到一条消息

Fatal error: Class 'Mail' not found in D:\xampp\htdocs\proj\Mailing\mymail.php on line xx

恢复的代码是这样的

<?php
     require_once 'Autoload.php';

     $smtp = Mail::factory('smtp',
          array ('host' => $host,
          'port' => $port,
          'auth' => true,
          'username' => $username,
          'password' => $password));
?>

也可以

<?php
     require_once 'Mail.php';

     $mail = new Mail();
?>

为什么我会收到该消息? 我已经将包含路径设置为“.;D:\xampp\php\pear”

我编辑了我的脚本并需要自动加载脚本,它工作得很好,因为它不会打印任何错误,但我仍然收到同样的消息,比如邮件不起作用(我编辑了上面的脚本),自动加载是一样的我的主脚本所在的目录。

我新建了一个文件,用全路径调用,然后输出是

Warning: require_once(D:\xampp\php\PEAR) [function.require-once]: failed to open stream: Permission denied in D:\xampp\htdocs\proj\Mailing\pMail.php on line 2

【问题讨论】:

你确定Mail.php保存在文件夹D:\xampp\htdocs\proj\Mailing\mymail.php ??? 你在哪里定义Mail类?由于require_once 调用显然是成功的(否则你会得到一个错误),问题是邮件类没有在包含的文件中定义。 Mail 是 PEAR 的 Mail.php 包中的一个类,所以它保存在 "D:\xampp\php\pear" 中,所以它的位置是 "D:\xampp\php\pear\Mail .php”,它不在项目文件夹中,但包含路径指向该目录。 【参考方案1】:

当你加载一个类时,如果你使用 autoloading,你不需要你的 php 文件。

例子:

Class Autoload 
   private $rootDirectory;
   private $paths = array(
       "system/core",
       "system/obj",
       "system/data"
   );

   public function __construct() 
       $this->RootDirectory = dirname(getcwd()); // Whatever is your root
       $this->activateAutoload("autoloadClassesFromSystemFolder");
   

   private function autoloadClassesFromSystemFolder($i) 
       foreach ($this->paths as $path) 
           // Please keep in mind that a class name has to be unique. 
           if (is_file($this->RootDirectory .'/'. $path .'/'. $i . ".php")) 
               include $this->RootDirectory .'/'. $path .'/'. $i . ".php";
               break;
           
       
   

   public function activateAutoload($functionName) 
       spl_autoload_register(array($this, $functionName));
   

在 php 中加载它唯一需要做的就是:

require "path/to/autoload.php";
$autoload = new Autoload();

之后,您可以根据需要使用任意数量的类,而不必担心类文件包含。

$mail = new Mail();

更多信息:http://nl.php.net/autoload

【讨论】:

so @Sem 上面写着 dirname(getcwd());我会将 getcwd() 更改为我自己的 PEAR 目录吗?比如, dirname(getcwd('D:\xampp\php\pear'));是这样吗? 我还是遇到同样的错误,比如文件不包含在内,你需要完整的脚本吗?只是我认为这违背了 Stack Overflow 的想法,即不是一个太具体的问题。 嗯,很抱歉这么晚的回答。就像我在评论中说的,你必须使用你的根目录。 它应该像 $this->RootDirectory = "D:\xampp\php\pear"。

以上是关于没有邮件类 require_once php的主要内容,如果未能解决你的问题,请参考以下文章

php require_once 没有按我想要的方式工作.. 相对路径问题

如何在不使用require_once的情况下自动加载和调用独立的PHP类?

PHP - 类构造中的Require_once

require_once 重复

在“require_once”之后找不到类

PHP中利用PHPMailer使用QQ邮箱实现邮件发送