Вызов файлов через PHP
Как только сайт расширится, став не просто «одностраничником», а более серьёзным проектом, возникнет необходимость синхронизации кода между разными файлами. Чтобы не редактировать каждый документ даже ради незначительных исправлений, советуется воспользоваться функциями PHPinclude();и require();, а также include_once();, require_once();.
Подобное можно совершить с помощью JS, указав document.writeIN();и в последствии вызывая нужное содержимое через теги <scriptsrc=»…»></script>. Минусом этого варианта является обработка на стороне посетителя сайта, вызывающая замедление загрузки сайта у пользователей слабых устройств. Содержимое, отправленное посредствами JavaScript, может быть проигнорировано поисковыми системами, а ещё один недостаток проявляется в несовместимости данного варианта с решениями, предполагающими выполнение действий на стороне back-end.
Обзор функций include»file.php»; include_once»file.php»; require»file.php»; require_once»file.php»;
Как и в документации, написанной создателями PHP, для описания предмета этой статьи используется слово «функция», когда подразумевается конструкционная единица языка. К этой группе относятся, к примеру, echo и print, вместе с рассматриваемыми require();, include(); и подобными не требующие, но поддерживающие заключения значений в скобки.
Кавычки задействовать обязательно, поскольку формат файла от его названия отделяется точкой, в PHP играющей роль связки двух переменных или самостоятельно прописываемых значений.
require(); и include(); служат для встраивания документов на серверной стороне, ввиду чего скорость загрузки не зависит от клиентских мощностей. Это же приводит к необходимости указывать полный путь файлов, не видимый простым посетителям ресурса и получаемый через элемент супермассива $_SERVER–DOCUMENT_ROOT. Его также можно прописывать вручную.
Обе функции действуют в обход заданных с помощью .htaccessпараметров чтения, что позволяет скрыть от пользователей файлы, которые не должны быть им доступны по-отдельности, не «ломая» работу программ.
Псевдо-функции имеют идентичный синтаксис и, более того, принцип работы. Отличие require(); от include(); заключается в том, что первый при некорректной выдаёт фатальную ошибку, а второй – предупреждение. С точки зрения безопасности require(); более надёжен, так как в случае каких-либо проблем с запрашиваемым содержимым скрипт просто не выполнится. А include(); лучше поставить на вывод нужных, но некритичных в случае возникновения каких-либо проблем документов.
Те же функции, но с постфиксом _once, отличаются отсутствием повторного переопределения на случай, если файл уже вызывался во время исполнения программы. К примеру, require_once(); и include_once(); полезны, когда необходимость запроса контента определяется результатами условий.
Распространённые проблемы
Указание видимого пути вместо абсолютного
Чтобы узнать путь, стоящий перед видимым, следует обратиться к $_SERVER[‘DOCUMENT_ROOT’], как к элементу массива. Далее остаётся дописать расположение документа, видимое в браузере, обрезав доменное имя ресурса.
Отсутствие кавычек
Содержимое этих псевдо-функций следует обворачивать в двойные кавычки(«») или секунды (») из-за присутствия точек между названиями и форматами документов. Интерпретатор распознаёт их, как попытку добавить какое-либо значение к существующему. Точки можно использовать для вызова переменной и/или функций, вручную определённой информации вместе.
Невозможность управления заголовками
Причиной ошибки, возникающей при отправке заголовков или cookiesи представленной невозможностью продолжения запланированной работы программы, может стать не только исходный файл, но и вложенные в него документы. К примеру, они могут быть сохранены в кодировке с BOM, иметь ненужные пробелы и переносы строки после закрывающих PHP-скрипты тегов (либо перед открывающими) и прочие моменты, приводящие к ошибке, рассмотренной сообществом.
Советы
- Если запрашиваемый документ полностью состоит из PHP-кода, необязательно добавлять ?> в конец документа. Интерпретатор автоматически отслеживает или наличие данного фрагмента, или конец файла, что не приведёт к ошибкам, предупреждениям и даже нотификациям внутри лога.
- В большие программы рекомендуется добавлять комментарии, а лучшим сценарием станет также предоставление описания файла с помощью документирования в самом начале. Туда же не будет лишним включить примеры страниц, которые могут ссылаться на программу.
- Подобным образом можно задействовать не только PHP-содержимое. Пример пользования – вывод футера или хедера с мгновенным обновлением на всех страницах. Содержимое может быть представлено в, например, формате .html.
- Контент, получаемый подобным образом, может быть и не «нацелен» на вывод какой-либо информации пользователю напрямую. К примеру, так можно задействовать функции, переменные из других документов, не определяя их повторно.
- Нет разницы, используются ли шорт-теги (<?) или полные (<?php). Главное – допустимость их обработки (при необходимости), устанавливаемая в конфигурации веб-сервера.
Примеры использования
Запрос компонентов сайта по-отдельности
<!DOCTYPE HTML>
<html>
<head>
<meta charset=»utf-8″ />
<title>Мой сайт</title>
</head>
<body>
<header>
<?include($_SERVER[‘DOCUMENT_ROOT’].»/folder/of/header.php»);?>
</header>
<main>
В чащах юга жил-был цитрус… — да, но фальшивый экземпляръ!
</main>
<footer>
<?include($_SERVER[‘DOCUMENT_ROOT’].»/folder/of/footer.php»);?>
</footer>
</body>
</html>
Далее нужно создать файлы header.php и footer.php, указать к ним верные директории. Код демонстрирует встраиваемость функций языка PHP и позволяет быстро редактировать компоненты страниц, выведенные в отдельные файлы– не нужно вносить изменения отдельно для каждого документа, достаточно обновить один из них, к которому будут обращаться остальные скрипты.
Здесь запрашивается единица супермассива, дополняющаяся к видимому пути файла через точку.
Обязательный запрос
<?php
require($_SERVER[‘DOCUMENT_ROOT’].»/very/important/file.php»);
Если возникнут проблемы с заданным файлом, вся программа не будет работать. В остальном функция работает как и include();.