Autoload funktioniert nicht

Hallo Allerseits,

Leider habe ich noch ein Problem mit meinem Hoststar-Server mit PHP 5.2.

Bis jetzt habe ich meine Applikation mit einem lokalen WAMP-Server unter Windows getestet und da hat immer alles gut funktioniert, aber auf meinem Hoststar-Server-Account ist ploetzlich Sense mit dem Autoload.

Ich habe eine Initialisierungsdatei die neben dem Standard-Autoload-Handler auch zwei benutzerdefinierte einbindet, und zwar eine eigene und eine vom Doctrine-Framework.

Auf dem Server-Account scheint das autoload zwar prinzipiell zu funktionieren, die Klassen die der Standard-Autoload-Handler aber finden sollte werden nicht gefunden und an die benutzerdefinierten weitergegeben.

Ich hab unten ein Beispielskript eingefuegt. Der Fehler tritt auf bei DbHelpers in der vorletzten Zeile. Diese Klasse ist in classes/DbHelpers.php und sollte von der Standard-Autoload-Handler-Funktion gefunden werden, da der Klassenname gleich dem Dateinamen und der Pfad im Include-Path ist. Allerdings wird der Name durchgereicht und dann von custom_autoload ausgegeben. Wenn ich classes/DbHelpers.php ueber require_once einbinde, dann funktioniert es.

require\_once( 'external/doctrine/Doctrine.php' );

function custom\_autoload( $className )
{
 switch( strtolower( $className ) )
 {
 case 'phpthumb': 
 require 'external/phpThumb/phpthumb.class.php'; 
 return true;
 }
 echo $className . 'not found.';
}

spl\_autoload\_register();
spl\_autoload\_register( array( 'Doctrine', 'autoload' ) );
spl\_autoload\_register( 'custom\_autoload' );

set\_include\_path( get\_include\_path() . PATH\_SEPARATOR . 'classes' . PATH\_SEPARATOR . 'content' );

DbHelpers::getConnection();

session\_start();

Ich habs auch mit absoluten Pfadangaben im Include-Path probiert, aber das hat nichts geholfen.

Wuerde mich ueber Hinweise freuen. :smile:

Schoene Gruesse, Robert

Hallo Allerseits,

Hab jetzt einen Workaround implementiert, und zwar habe ich die Funktion des Standard-Autoloaders in meinem Custom-Autoloader nachgebaut.

Ist zwar nicht sonderlich befriedigend, aber funktioniert. Wuerde mich auf jeden Fall aber trotzdem noch ueber Hinweise zu dem Problem freuen. :smile:

Der neue Code schaut jetzt so aus:

<?php require_once( 'external/doctrine/Doctrine.php' );<br />
 set\_include\_path( get\_include\_path() . PATH\_SEPARATOR . 'classes' . PATH\_SEPARATOR . 'content' );

 function custom\_autoload( $className )
 {
 // Search in include path for a <classname>.php<br> // This implements the behaviour of the standard spl_autoload() function, however<br> // this function did not work on my hosting account at Hoststar.at for unknown<br> // reasons<br> <br> $include_path = get_include_path();<br> $include_path_tokens = explode( PATH_SEPARATOR, $include_path );<br> <br> foreach( $include_path_tokens as $prefix )<br> {<br> $path = $prefix . '/' . $className . '.php';<br> <br> if( file_exists( $path ) )<br> {<br> require_once $path;<br> return;<br> }<br> } <br><br> // Handle special cases<br> switch( strtolower( $className ) )<br> {<br> case 'phpthumb': <br> require 'external/phpThumb/phpthumb.class.php'; <br> return true;<br> }<br> }<br> <br> // Standard spl_autoload() is not used since it does not work on the Hoststar.at hosting account<br> // spl_autoload_register();<br> spl_autoload_register( array( 'Doctrine', 'autoload' ) );<br> spl_autoload_register( 'custom_autoload' );<br> <br> DbHelpers::getConnection();<br> <br> session_start();<br>?&gt;</classname>

Schoene Gruesse, Robert