Gruß,
ich habe eine kleine Autoloader-Klasse die via include_path die dazugehörigen Dateien lädt.
Unter Windows 7 (phph 5.3.3 / apache 2.2.16 ) klappt das auch wunderbar,nur unter Linux(Linux eddie 2.6.24-22 / PHP Version 5.2.4-2ubuntu5.9 /apache 2.x) nicht.
Auszug aus dem Include-Path:
Linux:
.
:/usr/share/php
:/usr/share/pear
:/xxx/www/xxx/htdocs/v1/trunk/htdocs/includes/managers
:/xxx/www/xxx/htdocs/v1/trunk/htdocs/includes
:/xxx/www/xxx/htdocs/v1/trunk/htdocs/includes/PEAR
:/xxx/www/xxx/htdocs/v1/trunk/htdocs/lib/openid
:/xxx/www/xxx/htdocs/v1/trunk/htdocs/modules/admin
Windows:
.
;C:\php5\pear
;D:/xxx/xxx/htdocs/includes/managers
;D:/xxx/xxx/htdocs/includes
;D:/xxx/xxx/htdocs/includes/PEAR
;D:/xxx/xxx/htdocs/lib/openid
;D:/xxx/xxx/htdocs/modules/admin
Die dort angegebenen Verzeichnisse befinden sich auch all dort, jedoch bekomme ich unter Linux trotzdem : "Fatal error: Class 'Core' not found in /xxx/www/xxx/htdocs/v1/trunk/htdocs/index.php on line 29"
Die Core.php befindet sich im "/xxx/www/xxx/htdocs/v1/trunk/htdocs/includes" bzw. "D:/xxx/xxx/htdocs/includes" und müsste ja eigentlich gefunden werden.
Da es unter Windows funktioniert ,kann ich eigentlich "normale" Programmierfehler ausschließen und auf Case-Sensitive(unter Linux) wurde geachtet.
Ich hoffe das es verständlich ist und schonmal ein Danke im voraus.
ich habe eine kleine Autoloader-Klasse die via include_path die dazugehörigen Dateien lädt.
Unter Windows 7 (phph 5.3.3 / apache 2.2.16 ) klappt das auch wunderbar,nur unter Linux(Linux eddie 2.6.24-22 / PHP Version 5.2.4-2ubuntu5.9 /apache 2.x) nicht.
PHP-Code:
<?php
class Autoloader {
public static $instance;
public static function init() {
if (self::$instance == NULL)
self::$instance = new self();
return self::$instance;
}
public function __construct() {
spl_autoload_register(array('Autoloader', 'autoload'), $class);
spl_autoload_extensions('.php');
set_include_path(get_include_path() . PATH_SEPARATOR . MANAGERS);
set_include_path(get_include_path() . PATH_SEPARATOR . INCLUDES);
//PEAR directory
set_include_path(get_include_path() . PATH_SEPARATOR . INCLUDES . '/PEAR');
//Open ID library
set_include_path(get_include_path() . PATH_SEPARATOR . BASE . '/lib/openid');
}
public function autoload($class) {
spl_autoload($class);
}
//special method for modul loads
public static function loadModul($dir, $class = null) {
//split directories and classname
$dirs = array_reverse(explode('/', $dir));
$file = $dirs[0];
$dirs[0] = strtolower($dirs[0]);
//if class is emtpy, filename becomes classname
$class ? $class : $class = $file;
set_include_path(get_include_path() . PATH_SEPARATOR . MODULES . implode('/', $dirs));
require_once($file . '.php');
return new $class;
}
}
}
?>
Linux:
.
:/usr/share/php
:/usr/share/pear
:/xxx/www/xxx/htdocs/v1/trunk/htdocs/includes/managers
:/xxx/www/xxx/htdocs/v1/trunk/htdocs/includes
:/xxx/www/xxx/htdocs/v1/trunk/htdocs/includes/PEAR
:/xxx/www/xxx/htdocs/v1/trunk/htdocs/lib/openid
:/xxx/www/xxx/htdocs/v1/trunk/htdocs/modules/admin
Windows:
.
;C:\php5\pear
;D:/xxx/xxx/htdocs/includes/managers
;D:/xxx/xxx/htdocs/includes
;D:/xxx/xxx/htdocs/includes/PEAR
;D:/xxx/xxx/htdocs/lib/openid
;D:/xxx/xxx/htdocs/modules/admin
Die dort angegebenen Verzeichnisse befinden sich auch all dort, jedoch bekomme ich unter Linux trotzdem : "Fatal error: Class 'Core' not found in /xxx/www/xxx/htdocs/v1/trunk/htdocs/index.php on line 29"
Die Core.php befindet sich im "/xxx/www/xxx/htdocs/v1/trunk/htdocs/includes" bzw. "D:/xxx/xxx/htdocs/includes" und müsste ja eigentlich gefunden werden.
Da es unter Windows funktioniert ,kann ich eigentlich "normale" Programmierfehler ausschließen und auf Case-Sensitive(unter Linux) wurde geachtet.
Ich hoffe das es verständlich ist und schonmal ein Danke im voraus.
Kommentar