2011-11-07 4 views
0

J'essaie d'utiliser la bibliothèque php SwiftMailer avec un programme que j'ai écrit. J'ai utilisé la fonction spl_autoload_register() juste avant d'inclure cette bibliothèque. Cependant, avant d'utiliser cette bibliothèque que je définir explicitement les extensions de classe et les emplacements en utilisant les fonctions: splspl_autoload_register n'initialise pas la pile de chargement automatique

set_include_path(get_include_path().[my include path]); 
spl_autoload_extensions('.class.php'); 
spl_autoload_register(); 
session_start(); 

Le problème que je suis en cours d'exécution dans, est que maintenant je suis en train d'utiliser une bibliothèque qui ne fonctionne pas suivez les mêmes conventions de nommage. Leur propre classe de chargement automatique (créée par l'appel initial à la bibliothèque) ressemble à ceci.

public static function autoload($class) 
{ 
//Don't interfere with other autoloaders 
if (0 !== strpos($class, 'Swift_')) 
{ 
    return; 
} 

$path = dirname(__FILE__).'/'.str_replace('_', '/', $class).'.php'; 

if (!file_exists($path)) 
{ 
    return; 
} 

if (self::$initPath && !self::$initialized) 
{ 
    self::$initialized = true; 
    require self::$initPath; 
} 

require $path; 

}

Lorsque je tente de lancer simplement le programme après avoir appelé leur classe je reçois:

Fatal error: spl_autoload() [<a href='function.spl-autoload'> 
function.spl-autoload</a>]:Class Swift_MailTransport could not 
be loaded in [my file] on line 30 

Ligne 30:

$transport = Swift_MailTransport::newInstance(); 

J'ai essayé d'utiliser une coutume la classe autoload modélisée après la leur, cependant, tout ce que je reçois quand j'essaye:

var_dump(spl_autoload_functions()); 

résultats:

bool(false); 

Je sais que cela doit être une question assez simple, quelque chose que je suis avec vue, mais je ne peux pas le trouver.

Toute aide serait grandement appréciée.

Répondre

0

Ok, après m'être cogné la tête contre le mur toute la journée et n'avoir rien donné, j'ai eu une bonne réaction de la part de mon frère qui est aussi programmeur.

Tout le problème, découle de cette seule ligne:

require_once(SITE_ROOT.'/classes/lib/swift_required.php'); 

La variable SITE_ROOT faisait référence en fait l'emplacement Web (par exemple http: //), avec mon hôte actuel, cela ne fonctionne pas, il a besoin utiliser l'emplacement du fichier physique à la place. Après avoir effectué cette modification, l'autoloader inclus fonctionne comme annoncé.

0

Essayez de supprimer ceci:

spl_autoload_register(); 

De l'documentation:

[if] spl_autoload_register() is called without any parameters then 
    [spl_autoload(...)] functions will be used 

Sachant que, il est logique de penser que spl_autoload ne sait pas où charger vos classes Swiftmailer parce que les erreurs que vous obtenez dis comme ça. Il s'ensuit que SwiftMailer n'est pas dans votre chemin d'inclusion car spl_autoload essaie de charger à partir de là.

L'étape suivante consiste à placer vos classes SwiftMailer dans l'un des chemins d'inclusion.

+0

Est-ce que cela empêche vraiment d'ajouter plus de rappels automatiques? – hakre

Questions connexes