За последние 24 часа нас посетили 143305 программистов и 6472 робота. Сейчас ищут 2183 программиста ...

Помогите с spl_autoload_register и set_include_path

Тема в разделе "Прочие вопросы по PHP", создана пользователем efremovdenis, 8 янв 2015.

  1. efremovdenis

    efremovdenis Новичок

    С нами с:
    8 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Здравствуйте.
    На локальном сервере(Денвере) создал проект. Всё летает, всё идеально. При переносе на хостинг, как и могло случиться, произошли ошибки.
    Уже пару-тройку дней бьюсь с одной, перечитал много форумов, но всё равно не нашёл причину.

    index.php
    Код (Text):
    1.  
    2. set_include_path(get_include_path().PATH_SEPARATOR."config".PATH_SEPARATOR."core".PATH_SEPARATOR."controllers");
    3. spl_autoload_extensions("_class.php");
    4. spl_autoload_register();

    В этом же файле дёргается класс Route( ./core/route_class.php ) - всё удачно
    Код (Text):
    1. class Route extends aliasesController  {
    Так же и с классом Config ( ./config/config_class.php ) - всё удачно
    Код (Text):
    1. class Config {
    А вот класс aliasesController ( ./controllers/aliasesController_class.php ) - не видит.
    Код (Text):
    1. class aliasesController extends AbstractController {
    Выдаёт
    Код (Text):
    1. 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
    Помогите разобраться, сроки поджимают уже.
    Заранее, спасибо.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    код загрузчика?

    Добавлено спустя 1 минуту 6 секунд:
    а, всё, вижу. регистр имен файлов соответствует регистру имен классов?
     
  3. efremovdenis

    efremovdenis Новичок

    С нами с:
    8 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Да, полностью
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    а версия php в денвере и на сервере какая?
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    я конечно не сервер но очевидно что НЕ РАБОТАТЬ должно наоборот.
     
  6. efremovdenis

    efremovdenis Новичок

    С нами с:
    8 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Однако жалуется именно на aliasesController.
    Именно на этом месте я ничего и не понимаю.
    Config и Route видит, причём оба и без нареканий. Однако с aliasesController какая-то беда.

    Добавлено спустя 1 минуту 19 секунд:
    Денвер:5.3.13
    Сервер: 5.4.23
     
  7. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    Ну навернека и ругаеться!
    ЧТо в пас у тебя прописан КОНТРОЛЕР а класс описываешь Алиасконтролер!
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    я кажется понял. запрашиваемый файл не лежит рядом с вызывающим. потому что указаны относительные а не полные пути.
     
  9. efremovdenis

    efremovdenis Новичок

    С нами с:
    8 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Прости, я не понял к чему это.
    Ну, наверное. А с другой стороны, почему денвер не ругается? И как мне быть, в каждом контролере подключать загрузчик с теми или иными путями? Ну это будет что-то не то, имхо
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    почему денвер не ругается я хэ его зэ. я выдвинул предположение что убогая винда (раз денвер) сваливает регистры в одну беспорядочную кучу а никсы на хостинге требуют уважения. и красно-зеленым выделил что как раз у большинства файлов и классов совершенно разный регистр написания. и что ругается на класс имя файла которого соответствует записи в файле. и загадка почему не ругается на остальные.
    как быть? ну ты пути проверил?
     
  11. efremovdenis

    efremovdenis Новичок

    С нами с:
    8 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Это ладно, Бог с ним. Работает и ладно.
    А вот пути относительно чего писать? Относительно index.php они верны. Относительно класса Route придётся переписать. Так же и со всеми контроллерами, ибо по разным каталогам разбиты. Тут что-то не то.
    Он ругается именно для Route класса, т.к. он расширяет aliasesController. Возможно, всё же придётся переписать все контроллеры и вписать к каждому загрузчик того или иного класса с относительными путями, а это очень прескорбно.

    ЗЫ: Пробовал писать пути относительно корня, пробовал даже относительно /var/www/u....
    Ничего не спасло.
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    значит не так пробовал. возьми имя класса, добавь к нему свой суффикс, проитерируй инклюд паф добавляя к отдельным путям имя своего файла, и печатай на экран итоговое имя файла и обнаружен ли он на диске. ты явно не понимаешь относительно чего у тебя должны пути прописываться.
     
  13. efremovdenis

    efremovdenis Новичок

    С нами с:
    8 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Код (Text):
    1. class aliasesController
    Файл aliasesController_class.php
    инклудить относительно класса Route: ../controllers/aliasesController_class.php
    относительно index.php: ./controllers/aliasesController_class.php

    Или я что-то вообще не так делаю?
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    ты русский понимаешь? итерируй свой инклюд паф. тебе надо увидеть какие полные пути дает система. ведь именно по этим полным путям она нихера не находит. увидишь пути - увидишь в чем твоя ошибка заключается. я до сих пор считаю что дело в относительности.
    намекну. когда ты фигачишь конструкции вида ./config ./controllers и первым у тебя идет класс конфига то он запускается в ./config/config-class.php и если там идет запрос контроллера то дот-слеш идет относительно текущего файла. то есть config/./controllers/ccc.php и как пить дать нет у тебя каталога контроллеров вложенного в каталог конфигов потому что у тебя всё это вложено в какой-то другой каталог. но ты не работаешь относительно этого каталога и пых пытается работать так как ему написано было. и для него и для тебя это становится неожиданностью. но только ты не понял что сделал а он сделал всё ровно как и требовалось.
     
  15. efremovdenis

    efremovdenis Новичок

    С нами с:
    8 янв 2015
    Сообщения:
    14
    Симпатии:
    0
    Ты ошибся.
    Да и я, дурак, невнимательно прочитал документацию.
    http://php.ru/manual/function.spl-autoload.html
    Код (Text):
    1. void spl_autoload ( string $class_name [, string $file_extensions = spl_autoload_extensions() ] )
    Params:
    Код (Text):
    1. class_name
    2. The lowercased name of the class (and namespace) being instantiated.
    3.  
    4. file_extensions
    5. 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

    А у меня они разного регистра.
    Пути не менял.
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    ну проблема с регистром была мною первой озвучена. так что не так уж я и ошибся))))