Пути к файлам в PHP
При подключении скриптов или любой другой работой с файлами вы столкнётесь с путями в PHP, которые позволяют указать расположение файла с точки зрения серверной стороны.
Описание
Путь, видимый в адресной строке, лишь часть от настоящего расположения, которая известна серверу и используется в server-side скриптах (то есть, программах на PHP). По умолчанию он не отдаётся пользователям ресурса, но вы можете, если это по каким-то причинам потребуется, вывести путь посредством print либо echo.
Для получения абсолютного пути к корню (так называемому «перекрёстку», где находятся реальное и видимое расположения контента веб-сайта) следует обратиться к супермассиву _SERVER. В нём присутствует элемент DOCUMENT_ROOT, который содержит нужную в контексте этого материала информацию. Отобразить его можно так же, как и часть любого обычного массива.
Учтите, что использовать истинное, более длинное расположение следует только при взаимодействии посредством программ, выполняемых на сервере. Не стоит вводить такой путь для JS, предназначенных для работы в браузере;HTML, CSS. В таком случае он просто будет вести к несуществующему документу или директории, и вызов файла либо ссылка попросту не сработают.
Зато всегда требуется прописывать абсолютное расположение в PHP – например, если вы хотите использовать следующие функции:
- fopen;
- file_get_contents;
- file_put_contents;
- require;
- include;
- require_once;
- include_once.
Список неполный, но, как видно, для работы с файлами в PHP учитывать эту особенность обязательно.
Распространённые ошибки
Использование на клиентской стороне
Этот момент упоминался выше – не указывайте абсолютный путь для кода, который должен выполняться на стороне посетителя веб-сайта. Например, нельзя указывать данное расположение в ссылках, изображениях, вызовах стилей посредством <link>, JS-скриптах. Нужное вам содержимое в таком случае попросту не загрузится.
Кроме того, не стоит вводить путь посредством указания расположения на жёстком диске. В таком случае содержимое будет видно, но, к сожалению, лишь при наличии этого файла на устройстве пользователя. Попробуйте сами — посетите свой сайт, на котором присутствует такая ошибка, с телефона, чтобы убедиться в необходимости загружать файлы на сервер или, как минимум, сторонние хранилища с HTTP-доступом.
Указание URL в вызовах
Не вызывайте скрипты, исполняемые на том же самом сервере, посредством ссылок в интернете. Это не только увеличит задержки в выполнении кода из-за необходимости отправки HTTP-запросов (напоминаем, что лимит по времени работы скрипта на большинстве хостингов составляет от 10 до 30 секунд), но и позволит получить лишь только результат работы программы, практически не давая с ней взаимодействовать. Также этот момент несовместим с защитой программ посредством .htaccess–тогда она будет работать, а HTTP-вызовы – нет.
Используйте абсолютное позиционирование в require(), include() и подобных функциях. Учтите, что единственная разница между ними – в недоступности или возможности продолжить работу после неудачного выполнения, поэтому в целях безопасности советуется использовать первый вариант.
Примеры
Правильный вызов файла
<?php
require($_SERVER[‘DOCUMENT_ROOT’].»/script/my-code.php»); // правильно
# require(«https://example.com/script/my-code.php»); // неправильно
# require(«/script/my-code.php»); // неправильно
# require(«C:/Users/Administrator/apache/htdocs/script/my-code.php»); // неправильно
Вывод данных о расположении
<?phpecho»Абсолютный путь: <b>».$_SERVER[‘DOCUMENT_ROOT’].»</b>.»;