Блог Vaden Pro

Все о самостоятельном создании и продвижении сайтов

Подключение файлов в PHP используя include и require

Раздел: 

Создавая сайты на самописе (без использования фремворков, CMS, и прочих модных штучек упрощающих жизнь вебразработчикам) мы сталкиваемся с проблемой внесения правок в сайт, когда страниц становится много.

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

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

Использование include и require

Принципиальной разницы между этими двумя инструкциями Вам обнаружить не удастся при всем желании, но нюансы присутствуют:

В случае возникновения ошибки во время выполнения команды require парсер получит ответ fatal error и произойдет остановка выполнения кода страницы, в то время как include выдаст лишь warning и выполнение файла продолжится (просто не произойдет подключение файла).

Давайте для лучшего понимания темы разберем простейший пример.

У нас есть наш минисайт в котором хедер и футер одинаковые на всех страницах, а тело документа меняется.

Создаем файлы header.php и footer.php в которые помещаем код, который будет на всех страницах одинаковым, а в файлах index.php и newpage.php выполним подключение статичных частей. В итоге получаем:

Файлы сайта

Содержимое header.php

<header>
   <nav>
      <a href="newpage1.php" title="пункт меню">пункт меню</a>
      <a href="newpage2.php" title="пункт меню">пункт меню</a>
      <a href="newpage3.php" title="пункт меню">пункт меню</a>
   </nav>
</header>

Содержимое footer.php

<footer>
   <p>Сделано нами</p>
</footer>

Содержимое прочих страниц сайта

<!doctype html>
<html>
   <head>
      <title>Минисайт</title>
   </head>
   <body>
      <?php require "header.php"; ?>
	  <section>
	     <p>Много-много полезной информации</p>
	  </section>
	  <?php include "footer.php"; ?>
   </body>
</html>

В результате загрузки нашей страницы получаем следующую картину:

Страница после загрузки сайта

Как мы видим, все прекрасно работает.

Обращу внимание, что пример мы запускали на локальном сервере Denwer, поскольку для работы PHP необходимо наличие сервера с его поддержкой. Если создавать сайт в простой папке на ПК ничего работать не будет.

В рассмотренном примере мы использовали для подключение хедера require, а футера include. Чем пользоваться на своих сайтах — решать Вам. Как уже говорилось особой разницы между ними нет. Разве что require считается несколько более строгой инструкцией.

По факту строка <?php require "путь к файлу"; ?> попросту копирует все содержимое файла, путь к которому мы указываем, внутрь документа в котором находится.

Использование include _once и require _once

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

Предположим это произошло из-за того, что над сайтом работали несколько человек, и когда произошло объединение кодов, то вышел вот такой казус…

Чтобы исключить возможность появления подобных проблем разработчики часто используют инструкции include _once и require _once. Принцип действия у них точно такой же как и у include с require, но если файл в такой инструкции уже был подключен к нашему, то повторного подключения не произойдет.

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

На заметку

  • Чтобы было удобнее различать файлы страниц сайта и файлы их фрагментов, которые мы в них подключаем обычно подключаемым файлам добавляют частичку inc в название. Рассматривая данный подход на нашем примере мы бы из файла header.php получили файл header.inc.php ну и тд. Такой подход способен на порядок упростить понимание структуры сайта в будущем.
  • Код из файла, который мы подключаем, наследует область видимости строки в которой он подключается. Тобишь просто внутри страницы он будет обладать глобальной областью, а внутри функции- локальной.
  • Мы можем использовать include с require где нам угодно. Даже внутри скриптов.