За последние 24 часа нас посетили 18639 программистов и 1662 робота. Сейчас ищут 912 программистов ...

Управление корневой директорией

Тема в разделе "Прочие вопросы по PHP", создана пользователем kostyl, 15 авг 2009.

  1. kostyl

    kostyl Guest

    Такой вопрос...
    Допустим есть /public_html/фалы_сайта
    В том же /classes/классы
    Eсть один файл /config.php, который определяет всякие настройки, автолоад и прочее...
    Например есть переменная $RootPath = './' и автолоад:
    requaire_once($RootPath . 'classes' . $ClassName . '.php');
    Как мне организовать инициализацию $RootPath так, чтобы любой мой скрипт будь то в public_html или в / мог подключить config.php, а также без разницы, где будет лежать конфиг и папка классов. Короче, как универсальнее сделать, чтобы не писать при каких-то изменения $RootPath = './' $RootPath = '../' $RootPath = './public_html/' и подобное...
    Заранее благодарю.
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    $_SERVER['DOCUMENT_ROOT']
     
  3. kostyl

    kostyl Guest

    все правильно, надо сразу продумать дисковую архитектуру и ничего потом не менять ;)
     
  4. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Mr.M.I.T., говорят, $_SERVER['DOCUMENT_ROOT'] — может подвести

    PHP:
    1. <?php
    2. // Какой-то файл, который подключается во всех скриптах. Надо определить путь к директории, относительно него. Тут уже сам поекспериментируешь.
    3.     define ('ENGINE_PATH', realpath(dirname(__FILE__) . "/../") . "/");
    4.     define ('LOG_FILE', ENGINE_PATH . 'logs/php.log');
     
  5. kostyl

    kostyl Guest

    TheShock
    realpath - то, что надо
     
  6. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    в чём проблема потом поменять чё-нить? никогда таких проблем у меня не взникало
    TheShock
    кто? ссылку, не слышал
     
  7. kostyl

    kostyl Guest

    а у меня возникла, ибо по уродскому сделал все сразу, теперь хрен исправишь... ну исправишь, но надо перелапачивать кучу фалов...
     
  8. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    kostyl
    дык, на ошибках..
     
  9. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Mr.M.I.T.
    Следовательно — $_SERVER[«DOCUMENT_ROOT»] может содержать неверное значение, или вообще отсутствовать. Вероятность невелика, но я не вижу смысла рисковать, если есть более надёжный dirname(__FILE__).
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    вернёт не путь до корневого каталога, а путь до файла
     
  11. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Mr.M.I.T., а зачем мне путь до абстрактного корневого каталога, если мне нужен путь к определенной директории?
    У меня движок обычно лежит выше документ-рута и выглядит все типа такого:
    Код (Text):
    1. /engine
    2.     /classes
    3.     /core
    4.         index.php
    5.     /lib
    6. /public
    7.     index.php
    PHP:
    1. <?php
    2.  //public/index.php
    3.   define ('PUBLIC_PATH', dirname(__FILE__) . "/");
    4.   require_once PUBLIC_PATH . '../engine/core/index.php';
    5. ?>
    PHP:
    1. <?php
    2.  //engine/core/index.php
    3.   define ('ENGINE_PATH', realpath(dirname(__FILE__) . "/../") . "/");
    4. ?>
    И я совершенно не завишу ни от каких обстоятельств.
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    TheShock
    нах он выше корневого каталога?
    и кстати, константы в инклюде - зло
    есть set_include_path
     
  13. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а если
    Код (Text):
    1. /engine
    2.     /classes
    3.     /core
    4.         index.php
    5.     /lib
    6. /public
    7.     index.php
    8.    /public2
    9.        index2.php
    чё в индекс2 делать будешь?
     
  14. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Мотивируй
    Как раз таки set_include_path — зло
     
  15. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Мотивируй =)
     
  16. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  17. realpath_cache_*
     
  18. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Тем, что смотришь на
    Код (Text):
    1. require_once 'some-file.php';
    и не знаешь, какой файл подключится. и даже узнать нельзя с помощью
    Код (Text):
    1. echo 'some-file.php';
    . В отличии от
    Код (Text):
    1. require_once ENGINE_PATH . 'some-file.php';
    2. echo ENGINE_PATH . 'some-file.php';
    у меня таких проблем не возникает. Прописал себе путь и все. Благо, это один раз делать надо.

    а ты не знаешь? поищи в интернете.

    +1 к "мотивируй".
     
  19. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    угу... будешь точечки плодить, автолоад умрёт
    знаю и считаю брехнёй
     
  20. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Не причина.
    У меня сделано так и пока не вижу смысла менять:

    Главный файл в корневой директории:
    PHP:
    1. <?php
    2.  
    3. // Устанавливаем путь к главной директории
    4.  
    5. // Подгружаем
    6. require_once '/classes/mysql.class.php';
    7.  
    8. ?>
    Допутим mysql.class.php подгружает интерфейс

    mysql.class.php
    PHP:
    1. <?php
    2.  
    3. // Можно так
    4. require_once get_include_path().'/interfaces/mysql.interface.php';
    5.  
    6. ?>
    Ну и на крайний случай:

    PHP:
    1. <?php
    2.  
    3. include_once getcwd().'/somefile.php';
    4.  
    5. ?>
     
  21. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Mr.M.I.T., с чего бы ему умирать? :))) у меня автолоад подключает что-то типа ENGINE_PATH . "classes/class.php", где ENGINE_PATH — это путь без всяких точечек

    ну, как минимум, у меня точно не вылезут сырцы наружу при каком-то ЧП, как случалось уже у многих популярных ресурсов
     
  22. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Apple, вообще, учитывая то, что я пишу require_once только трижды — к индексному файлу, в индексном файле к файлу конфигурации и в "автолоаде", как-то не задумывался над этим. вообще — это не я сказал, что инклуд-пас зло ;) просто лично для себя не вижу смысла его использовать.
     
  23. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ну если ты подключишь в индэкс2 шабонизатор, который работает с шаблончиками лежащими в папке в корневом каталоге
    вообщем, тема ТС, у тс проблемка с точичками, угу
     
  24. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Mr.M.I.T., у меня в индексе2 ничего не будет кроме рекуире самого движка
     
  25. Mr.M.I.T., чем спорить, шел бы починил свой сайт)