Espacio de nombres Autoload funciona bajo Windows, pero no en Linux

Tengo el siguiente código php:

index.php

delegate(); ?> 

modules \ standard \ handler.php

  

En Windows 7, ejecutando WAMP, el código produce el mensaje “¡Hola de Delegación!” sin embargo, bajo Linux, obtengo lo siguiente:

Error fatal: spl_autoload (): Class modules \ standard \ handler no se pudo cargar en /var/www/index.php en la línea 15

Windows ejecuta PHP 5.3.0 bajo WAMP, y Linux está ejecutando el paquete 5.3.2 dotdeb en Ubuntu 9.10.

¿Es este un problema de configuración en mi linux box, o simplemente una diferencia en la forma en que se manejan los espacios de nombres y la carga automática en los diferentes sistemas operativos?

El autocargador SPL es extremadamente primitivo, no tiene conocimiento de los espacios de nombres, por lo que intenta cargar un archivo con \ en su nombre, mientras que en Linux / Unix el separador de ruta es / no.

Herman Radtke dice que ha enviado un parche:

http://www.hermanradtke.com/blog/hidden-features-with-spl_autoload-and-namespaces/

: s

Espero que se implemente pronto.

Por ahora uso esta solución:

  
 function __autoload($class_name) { $paths[] = dirname(__FILE__) . "/../libs/misc/"; $paths[] = dirname(__FILE__) . "/../../libs/misc/"; $paths[] = dirname(__FILE__) . "/../../libs/helpers/"; $paths[] = dirname(__FILE__) . "/../../libs/simpleimage/"; foreach($paths as $path) { if(file_exists($path.strtolower($class_name).'.class.php')){ require_once($path.strtolower($class_name).'.class.php'); } } } 
 function __autoload($class_name) { $class_name = strtolower(str_replace('\\', DIRECTORY_SEPARATOR, $class_name)); include $class_name . '.php'; } 

El srttolower es necesario en Apache porque es (contrario a IIS) el caso sentive.

Este es un problema común que ocurre cuando se carga automáticamente. La solución es usar constante DIRECTORY_SEPARATOR en la función de autocarga.

Por lo tanto, su función de autocarga se verá como sigue

  

Si necesita obtener más información sobre la carga automática del espacio de nombres / clase, visite aquí

Gracias.