Скачать книгу

и мы всегда можем вернуться обратно на старт. Отправится в ufo. Узнать, что там необходимо. Сделать крюк допустим до места chat и вернуться обратно уже с полным пакетом всего что надо. Если и сейчас что-то забыли, не вопрос. Можно опять съездить куда надо и вернуться. Т.е. абсолютный путь дает спокойное и предсказуемое поведение в точках назначения.

      Поэтому использовать полностью относительные пути в PHP я бы не советовал вообще. Целесообразнее определить с помощью PHP корневую директорию веб-сервера, а местоположения файлов указывать относительно ее.

      Значит остается абсолютный путь. Применительно к решению данной задачи есть два варианта по созданию абсолютных путей:

      Вариант А: использовать константу __DIR__.

      __DIR__ константа для получения абсолютного пути к папке, это директория файла. Если используется внутри подключаемого файла, то возвращается директория этого файла. Это эквивалентно вызову dirname(__FILE__). Возвращаемое имя директории не оканчивается на слеш, за исключением корневой директории[6].

      Применительно к нашей задаче данная константа не совсем удобна, зато будет работать везде. Неудобство будет заключаться в том, что в первую очередь нас интересует путь к корню сайта, а поскольку мы не знаем заранее его название, то придется использовать обходной способ. И этот способ будет работать только когда мы будем знать названия папок из которых будут вызываться include. Заключается способ в том, что на тех страницах, где будут вызываться include прописываются папки для поиска загружаемых файлов. Это делается при помощи функции set_include_path которая задает значение настройки конфигурации include_path на время выполнения скрипта.

      Конфигурационная директива include_path указывает список директорий, в которых функции require, include, fopen(), file(), readfile() и file_get_contents() ищут файлы. Формат соответствует формату системной переменной окружения PATH: список директорий, разделенных двоеточием в Unix или точкой с запятой в Windows[7].

      При поиске подключаемых файлов PHP отдельно рассматривает каждое значение в include_path. Он проверяет первый путь, если файл в нем не найден, то он переходит к следующему, и так до тех пор, пока не найдет подключаемый файл, либо вернет E_WARNING или E_ERROR.

      Проще говоря, необходимо указать папку, в которой будут искаться подключаемые файлы.

      Таким образом, чтобы подключить файлы, в начале страницы, где требуется включение, будет нужно прописать код:

      Листинг А. Получение пути к корню сайта. Размещается вначале страницы.

      <?php

      $p = explode('ufo', __DIR__);

      echo $p[0];

      set_include_path(get_include_path() . PATH_SEPARATOR . $p[0]);

      где ufo имя папки из которой вызывается файл. В примере указано ufo, но по факту любое.

      Для сайта news и папки ufo в константе __DIR__ будет такой путь:

      C:\OSPanel\domains\news\ufo

      При помощи функции explode этот путь делится на две части. Разделителем будет служить название каталога, в данном примере ufo. В итоге в $p[0] будет содержаться левая часть:

      C:\OSPanel\domains\news\

      т.е. путь к корню сайта.

      И теперь можно подключать файлы из любых каталогов следующим образом:

      include "chat/нужный скрипт"; или include "ufo/нужный скрипт";. Мне кажется это довольно неудобно, хотя и будет работать

Скачать книгу