Лучшая практика для путей PHP
Я был во всем Интернете, пытаясь найти лучший способ справиться с путями на моем сайте. Должен ли я использовать относительные пути, абсолютные пути?
Я видел dirname (FILE), упомянутый несколько раз. Одна проблема, с которой я сталкиваюсь с относительными путями, заключается в том, что файлы PHP, которые включены в несколько других файлов на разных уровнях каталогов, вызывают разрыв относительных путей. Например, если структура каталогов
Root
A
B
b
И файл PHP в b и An включает другой файл из B, тогда относительные пути для кода в файле в B будут другими.
В общем, каков наилучший способ обработки путей к файлам в отношении включений и файловых операций в коде.
Ответы
Ответ 1
Есть много способов узнать путь, который всегда всегда проще определить константу в файле в корне проекта index.php
или config
сортировки.
то я могу использовать SITE_ROOT
для include/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();
?>
Ответ 2
Вы можете поместить все ваши включенные файлы в один основной каталог. Затем создайте переменную пути в файле конфигурации или в самом script, который указывает на каталог include.
Ответ 3
Лучший способ использования правильных соглашений об именах для структуры каталогов, файлов PHP и имен классов файла и дизайна автозагрузчика для включения файла
Ответ 4
В структуре Zend есть несколько хороших указателей на оптимизацию включенных путей:
http://framework.zend.com/manual/1.10/en/performance.classloading.html
Даже если вы не используете фреймворк Zend, это хорошие указатели. Общие отметки:
- Использовать абсолютные пути
- Уменьшите количество включенных вами путей.
- Определить текущий каталог последним или вообще не выполнять
- Определите свой Zend Framework include_path как можно раньше (не очень важно, если вы не используете Zend)
Ответ 5
В новой версии php (PHP5.3) можно использовать __ autoload
Итак, вам просто нужно определить корень вашего приложения.