Рутовый путь к целевой папке вместо относительного в PHP

Форум для тех кто начинает осваивать язык php.
Anry77
Сообщения: 1
Поблагодарили: 1 раз

Рутовый путь к целевой папке вместо относительного в PHP

Сообщение Anry77 » Пт сен 09, 2016 6:54 pm

Никогда не используйте относительные пути к папкам, вместо этого используйте root-овый путь. Почему? Ниже объяснение.
Часто можно увидеть в тексте кода подобные строки:

Код: Выделить всё

require_once('../../lib/some_class.php'); 

Такой подход имеет ряд недостатков. А именно:
  1. Первым делом такая строчка кода будет искать во всех папках, определенных в include путях php-кода, затем искать в текущей директории. Таким образом будет потрачено много времени на поиск по многим папкам.
  2. Когда один скрипт включается в другой скрипт, находящийся в другой папке, его базовая папка изменяется.
  3. Другая проблема заключается в том, что когда скрипт выполняется из под cron'а, он может не иметь родительской папки как рабочей папки.
Таким образом хорошей идеей будет всегда указывать абсолютные пути:

Код: Выделить всё

define('ROOT' , '/var/www/project/');
require_once(
ROOT . '../../lib/some_class.php'); 

Кусок кода выше показывает абсолютные пути, которые всегда остаются неизменными. Но и это дело можно сделать чуточку лучше. Поскольку папка /var/www/project может меняться, неужели нужно делать изменения постоянно? Нет. Вместо этого нужно сделать этот путь портабельным, используя "магическую" константу __FILE__, как в примере ниже:

Код: Выделить всё

//допустим ваш скрипт находится в /var/www/project/index.php
//Тогда __FILE__ всегда будет показывать этот полный путь.
define('ROOT' , pathinfo(__FILE__, PATHINFO_DIRNAME));
require_once(
ROOT . '../../lib/some_class.php'); 

Таким образом, даже если вы переместили свой проект в другую папку, например переместив проект на другой сервер, этот самый код будет работать без изменений.
Реклама

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость