Здравствуйте. На локальном сервере(Денвере) создал проект. Всё летает, всё идеально. При переносе на хостинг, как и могло случиться, произошли ошибки. Уже пару-тройку дней бьюсь с одной, перечитал много форумов, но всё равно не нашёл причину. index.php Код (Text): set_include_path(get_include_path().PATH_SEPARATOR."config".PATH_SEPARATOR."core".PATH_SEPARATOR."controllers"); spl_autoload_extensions("_class.php"); spl_autoload_register(); В этом же файле дёргается класс Route( ./core/route_class.php ) - всё удачно Код (Text): class Route extends aliasesController { Так же и с классом Config ( ./config/config_class.php ) - всё удачно Код (Text): class Config { А вот класс aliasesController ( ./controllers/aliasesController_class.php ) - не видит. Код (Text): class aliasesController extends AbstractController { Выдаёт Код (Text): Fatal error: spl_autoload(): Class aliasesController could not be loaded in /var/www/u8112283/public_html/new/www/core/route_class.php on line 2 Помогите разобраться, сроки поджимают уже. Заранее, спасибо.
код загрузчика? Добавлено спустя 1 минуту 6 секунд: а, всё, вижу. регистр имен файлов соответствует регистру имен классов?
Однако жалуется именно на aliasesController. Именно на этом месте я ничего и не понимаю. Config и Route видит, причём оба и без нареканий. Однако с aliasesController какая-то беда. Добавлено спустя 1 минуту 19 секунд: Денвер:5.3.13 Сервер: 5.4.23
я кажется понял. запрашиваемый файл не лежит рядом с вызывающим. потому что указаны относительные а не полные пути.
Прости, я не понял к чему это. Ну, наверное. А с другой стороны, почему денвер не ругается? И как мне быть, в каждом контролере подключать загрузчик с теми или иными путями? Ну это будет что-то не то, имхо
почему денвер не ругается я хэ его зэ. я выдвинул предположение что убогая винда (раз денвер) сваливает регистры в одну беспорядочную кучу а никсы на хостинге требуют уважения. и красно-зеленым выделил что как раз у большинства файлов и классов совершенно разный регистр написания. и что ругается на класс имя файла которого соответствует записи в файле. и загадка почему не ругается на остальные. как быть? ну ты пути проверил?
Это ладно, Бог с ним. Работает и ладно. А вот пути относительно чего писать? Относительно index.php они верны. Относительно класса Route придётся переписать. Так же и со всеми контроллерами, ибо по разным каталогам разбиты. Тут что-то не то. Он ругается именно для Route класса, т.к. он расширяет aliasesController. Возможно, всё же придётся переписать все контроллеры и вписать к каждому загрузчик того или иного класса с относительными путями, а это очень прескорбно. ЗЫ: Пробовал писать пути относительно корня, пробовал даже относительно /var/www/u.... Ничего не спасло.
значит не так пробовал. возьми имя класса, добавь к нему свой суффикс, проитерируй инклюд паф добавляя к отдельным путям имя своего файла, и печатай на экран итоговое имя файла и обнаружен ли он на диске. ты явно не понимаешь относительно чего у тебя должны пути прописываться.
Код (Text): class aliasesController Файл aliasesController_class.php инклудить относительно класса Route: ../controllers/aliasesController_class.php относительно index.php: ./controllers/aliasesController_class.php Или я что-то вообще не так делаю?
ты русский понимаешь? итерируй свой инклюд паф. тебе надо увидеть какие полные пути дает система. ведь именно по этим полным путям она нихера не находит. увидишь пути - увидишь в чем твоя ошибка заключается. я до сих пор считаю что дело в относительности. намекну. когда ты фигачишь конструкции вида ./config ./controllers и первым у тебя идет класс конфига то он запускается в ./config/config-class.php и если там идет запрос контроллера то дот-слеш идет относительно текущего файла. то есть config/./controllers/ccc.php и как пить дать нет у тебя каталога контроллеров вложенного в каталог конфигов потому что у тебя всё это вложено в какой-то другой каталог. но ты не работаешь относительно этого каталога и пых пытается работать так как ему написано было. и для него и для тебя это становится неожиданностью. но только ты не понял что сделал а он сделал всё ровно как и требовалось.
Ты ошибся. Да и я, дурак, невнимательно прочитал документацию. http://php.ru/manual/function.spl-autoload.html Код (Text): void spl_autoload ( string $class_name [, string $file_extensions = spl_autoload_extensions() ] ) Params: Код (Text): class_name The lowercased name of the class (and namespace) being instantiated. file_extensions By default it checks all include paths to contain filenames built up by the lowercase class name appended by the filename extensions .inc and .php. Самая загвоздка в этом: class_name The lowercased name of the class А у меня они разного регистра. Пути не менял.