Я был повсюду в Интернете, пытаясь понять, как лучше всего обрабатывать пути на моем веб-сайте. Должен ли я использовать относительные пути, абсолютные пути?
Я видел dirname ( FILE ) несколько раз. Одна из проблем, с которыми я сталкиваюсь с относительными путями, заключается в том, что php-файлы, которые включены несколькими другими файлами на разных уровнях каталога, вызывают разрыв относительных путей. Например, если структура каталогов
Root A B b
И php-файл в b и A включает в себя другой файл из B, тогда относительные пути для кода в файле в B будут разными.
Извините, если это сбивает с толку, мне сложно печатать то, что я пытаюсь сказать.
Таким образом, в общем, что является лучшим способом обработки путей к файлам в отношении включений и операций с файлами в коде.
Спасибо
Тут есть много способов узнать путь, который мне всегда проще определить константу в файле в корне проекта index.php
или config
of sort. то я могу использовать SITE_ROOT
для SITE_ROOT
/ class loaders ect и SITE_URL
для представлений, контроллеров, ect перенаправления.
<?php $root=pathinfo($_SERVER['SCRIPT_FILENAME']); define ('BASE_FOLDER', basename($root['dirname'])); define ('SITE_ROOT', realpath(dirname(__FILE__))); define ('SITE_URL', 'http://'.$_SERVER['HTTP_HOST'].'/'.BASE_FOLDER); ?>
Автозагрузчик базового класса
<?php function __autoload($class_name) { include (SITE_ROOT.'/includes/'.$class_name.'.php'); } $obj = new MyClass1(); $obj2 = new MyClass2(); ?>
Вы можете поместить все ваши включенные файлы в один основной каталог. Затем создайте переменную пути в файле конфигурации или в самом скрипте, который указывает на каталог include.
Лучший способ использования правильных соглашений об именах для структуры каталогов, файлов PHP и имен классов файла и дизайна автозагрузчика для включения файла
В структуре Zend есть несколько хороших указателей на оптимизацию включенных путей:
http://framework.zend.com/manual/1.10/en/performance.classloading.html
Даже если вы не используете фреймворк Zend, это хорошие указатели. Общие пункты:
Можно использовать новую версию php (PHP5.3) __autoload Итак, вам просто нужно определить корень вашего приложения.