Такой вопрос... Допустим есть /public_html/фалы_сайта В том же /classes/классы Eсть один файл /config.php, который определяет всякие настройки, автолоад и прочее... Например есть переменная $RootPath = './' и автолоад: requaire_once($RootPath . 'classes' . $ClassName . '.php'); Как мне организовать инициализацию $RootPath так, чтобы любой мой скрипт будь то в public_html или в / мог подключить config.php, а также без разницы, где будет лежать конфиг и папка классов. Короче, как универсальнее сделать, чтобы не писать при каких-то изменения $RootPath = './' $RootPath = '../' $RootPath = './public_html/' и подобное... Заранее благодарю.
Mr.M.I.T., говорят, $_SERVER['DOCUMENT_ROOT'] — может подвести PHP: <?php // Какой-то файл, который подключается во всех скриптах. Надо определить путь к директории, относительно него. Тут уже сам поекспериментируешь. define ('ENGINE_PATH', realpath(dirname(__FILE__) . "/../") . "/"); define ('LOG_FILE', ENGINE_PATH . 'logs/php.log');
в чём проблема потом поменять чё-нить? никогда таких проблем у меня не взникало TheShock кто? ссылку, не слышал
а у меня возникла, ибо по уродскому сделал все сразу, теперь хрен исправишь... ну исправишь, но надо перелапачивать кучу фалов...
Mr.M.I.T. Следовательно — $_SERVER[«DOCUMENT_ROOT»] может содержать неверное значение, или вообще отсутствовать. Вероятность невелика, но я не вижу смысла рисковать, если есть более надёжный dirname(__FILE__).
Mr.M.I.T., а зачем мне путь до абстрактного корневого каталога, если мне нужен путь к определенной директории? У меня движок обычно лежит выше документ-рута и выглядит все типа такого: Код (Text): /engine /classes /core index.php /lib /public index.php PHP: <?php //public/index.php define ('PUBLIC_PATH', dirname(__FILE__) . "/"); require_once PUBLIC_PATH . '../engine/core/index.php'; ?> PHP: <?php //engine/core/index.php define ('ENGINE_PATH', realpath(dirname(__FILE__) . "/../") . "/"); ?> И я совершенно не завишу ни от каких обстоятельств.
а если Код (Text): /engine /classes /core index.php /lib /public index.php /public2 index2.php чё в индекс2 делать будешь?
Тем, что смотришь на Код (Text): require_once 'some-file.php'; и не знаешь, какой файл подключится. и даже узнать нельзя с помощью Код (Text): echo 'some-file.php'; . В отличии от Код (Text): require_once ENGINE_PATH . 'some-file.php'; echo ENGINE_PATH . 'some-file.php'; у меня таких проблем не возникает. Прописал себе путь и все. Благо, это один раз делать надо. а ты не знаешь? поищи в интернете. +1 к "мотивируй".
Не причина. У меня сделано так и пока не вижу смысла менять: Главный файл в корневой директории: PHP: <?php // Устанавливаем путь к главной директории set_include_path(dirname(__FILE__)); // Подгружаем require_once '/classes/mysql.class.php'; ?> Допутим mysql.class.php подгружает интерфейс mysql.class.php PHP: <?php // Можно так require_once get_include_path().'/interfaces/mysql.interface.php'; ?> Ну и на крайний случай: PHP: <?php include_once getcwd().'/somefile.php'; ?>
Mr.M.I.T., с чего бы ему умирать? )) у меня автолоад подключает что-то типа ENGINE_PATH . "classes/class.php", где ENGINE_PATH — это путь без всяких точечек ну, как минимум, у меня точно не вылезут сырцы наружу при каком-то ЧП, как случалось уже у многих популярных ресурсов
Apple, вообще, учитывая то, что я пишу require_once только трижды — к индексному файлу, в индексном файле к файлу конфигурации и в "автолоаде", как-то не задумывался над этим. вообще — это не я сказал, что инклуд-пас зло просто лично для себя не вижу смысла его использовать.
ну если ты подключишь в индэкс2 шабонизатор, который работает с шаблончиками лежащими в папке в корневом каталоге вообщем, тема ТС, у тс проблемка с точичками, угу