1

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
4

1 に答える 1

0

クラスをロードするときに、 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

于 2012-06-26T13:49:54.757 に答える