Вызов файлов через 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();.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *