У меня есть index.phpPHP автозагрузчика и Unix Case-Sensitive File-System
<?php
include('_controller/Autoloader.php');
Gold_Autoloader::init();
$mysql = new Gold_MySQL();
_controller/Autoloader.php
<?php
class Gold_Autoloader
{
public static $loader;
public static function init()
{
if (self::$loader == NULL)
self::$loader = new self();
return self::$loader;
}
public function __construct()
{
spl_autoload_register(array($this, 'controller'));
spl_autoload_register(array($this, 'resources'));
}
public function resources($className)
{
$className = preg_replace('#Gold_#', '', $className);
$className = preg_replace('#_#', DIRECTORY_SEPARATOR, $className);
set_include_path(PROJECT_ROOT . '_resources');
spl_autoload_extensions('.php');
spl_autoload($className);
}
public function controller($className)
{
$className = preg_replace('#Gold_#', '', $className);
$className = preg_replace('#_#', DIRECTORY_SEPARATOR, $className);
set_include_path(PROJECT_ROOT . '_controller');
spl_autoload_extensions('.php');
spl_autoload($className);
}
}
И у меня есть файл _controller/MySQL. php с Gold_MySQL.class. В системе окон этот код работает, и в том числе MySQL.php, но на хостинг этот код не работает ((
[Thu Jan 27 12:55:57 2011] [error] PHP Fatal error: Class 'Gold_MySQL' not found in /home/u91167/youd0main.com/www/index_.php on line 5
EDIT
Как сделать так, чтобы Unix мог смотреть на какие-либо файлы? Зенд не имеет файлов со строчной буквы.
FYI, использование DIRECTORY_SEPARATOR является излишним. При включении файлов Windows по-прежнему будет принимать разделитель Unix, т.е. C: /folder/MyClass.php все еще работает. DIRECTORY_SEPARATOR следует использовать при взломе системного пути, например $ _SERVER ['DOCUMENT_ROOT']. Я просто предпочел. – Cobby
Кроме того, вам не нужно использовать preg_replace, поскольку вы на самом деле не используете какие-либо регулярные выражения, переключитесь на str_replace и все равно будете работать одинаково ... немного быстрее. – Cobby