В статье рассказывается:
- Как подключить PHP из другой директории
- Как работает подключение кода PHP
- Различия `include`, `include_once`, `require`, `require_once`
- Подведём итоги
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
Приветствую читателей блога! У вас наверняка уже есть небольшой опыт в кодинге на PHP. Возможно, вы уже разобрались с использованием переменных и базовых конструкций этого языка, а значит, логика вашего приложения увеличивается, как и количества кода.
Конечно, пока вся программа уменьшается в десяток строк, разбивать её на части не нужно. Но вы уже понимаете, что так будет не всегда: авторизация, отправка писем, взаимодействия с базой данных и т.д. – все это приведет к увеличению кода приложения.
Вы спросите: «Ну и что с того? Разве плохо писать всю логику в одном файле?». Стопроцентного ответа на этот вопрос нет, но мой опыт говорит, что код приложения, написанный в одном файле:
- при дополнении и внесении новой логики приводит к частым ошибкам
- требует большего времени для изучения другим разработчиком
- через месяц-два при необходимости маленькой правки потребует у тебя гораздо больше времени на понимание кода, чем на саму правку.
Если этих доводов недостаточно – советую почитать книгу Роберта Мартина «Чистый код». А пока продолжу.
Представим, что у нас есть 2 файла: `index.php` и `1.php`, лежащих в одной директории.
Файл «index.php»:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> </body> </html>
Файл «1.php»:
<h1>Hello World!</h1>
Задача: вывести содержимое файла «1.php» в контейнере `body`, при запуске файла «index.php». Решить её можно разными способами, и в этом посте мы рассмотрим некоторые из них. Подключение PHP возможно с помощью разных инструкций:
- `include`
- `include_once`
- `require`
- `require_once`
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Скачивайте и используйте уже сегодня:
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Самый простой пример решения с `include`:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php include '1.php'; ?> </body> </html>
Результат запуска в браузере:
Как подключить PHP из другой директории
Теперь изменим условия. Переместим файл `1.php` в папку с названием `test`, которую создадим в директории с файлом `index.php`.
Поскольку подключаемый файл находится в другой директории, для его подключения следует указать сначала папку, в которой он находится, а потом и сам файл.
Далее изменим код в `index.php`
<?php include 'test/1.php'; ?>
Строка, что мы указываем после инструкции `include`, это путь к файлу. Он может быть относительный (к файлу, где используется подключение) и абсолютным (от корня файловой системы). В приложениях рекомендуются использовать относительные пути.
Между папками, файлами и другими папками в пути устанавливаются разделители. Универсальный разделитель для различных операционных систем – `/`.
Если в папке `test` у нас была бы еще папка `lot`, в которой лежал файл `1.php`, то относительный путь выглядел бы так: ‘test/lot/1.php’.
С путями немного разобрались – возвращаемся к инструкциям. Произведем изменения в файлах. Файл «index.php»:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php $say = 'Hello world!'; include 'test/1.php'; echo $test; echo "<p>End</p>"; ?> </body> </html>
Файл `1.php`:
<?php echo "<h1>{$say}</h1>"; $test = 'TEst connect';
Посмотрим на изменение в выводе:
Как работает подключение кода PHP
Интерпретатор php «читает» код сверху вниз и слева направо, как мы читаем книги на русском языке. На исполнение от сервера ему указывается файл «index.php», а значит, чтение начинается с него. Дойдя до строчки с `include ‘test/1.php’`, интерпретатор пытается найти и исполнить это файл так, как будто он является частью «index.php».
Перед подключением и исполнением файла «1.php» уже существует переменная `$say`, в которой содержится ‘Hello world!’. При выполнении файла «1.php», содержимое этой переменной выводится на экран и создается переменная `$test`, которая в свою очередь и выводится на экран в файле `index.php`.
Если описанное выше непонятно, советую немного поиграться с файлами `1.php` и `index.php` создавая и выводя в них переменные.
Скачать файлРазличия `include`, `include_once`, `require`, `require_once`
Переименуем файл «1.php»в файл «2.php» и обратимся к «index.php»:
В итоге получаем ошибку. Но обратите внимание на то, что после вывода ошибки код PHP все равно продолжил выполнение и вывел `End`. Заменим `include` на `require` и запустим на выполнение.
Разница между `include` и `require` заключается в том, что при подключении файла PHP первая инструкция позволяет продолжить выполнения скрипта, если не найден файл, а `require` завершает его, выводя фатальную ошибку.
Теперь рассмотрим отличие инструкций `require` и `require_once`. Внесем небольшие правки в наши файлы. Вот новый «index.php»:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php $say = 'Hello world!'; require 'test/2.php'; require 'test/2.php'; require 'test/2.php'; require 'test/2.php'; echo "<p>End</p>"; ?> </body> </html>
на обучение «Веб-разработчик» до 22 декабря
И файл «2.php»:
<?php echo "<h1>{$say}</h1>";
Запускаем:
Как видно на скриншоте, с помощью `require` мы успешно подключили файл несколько раз. Снова внесем изменение в файлы. Новый файл «index.php»:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php require 'test/2.php'; require 'test/2.php'; require 'test/2.php'; require 'test/2.php'; echo "<p>End</p>"; ?> </body> </html>
Читайте также!
И новый файл «2.php» — на этот раз объявим там функцию:
<?php echo '<p>Im included</p>'; function sayHello($say) { echo "<h1>{$say}</h1>"; }
Результат выполнения:
Второе подключение файла «2.php» приводит к ошибке, как раз потому что в этом файле происходит объявление функции. А в PHP-скрипте двух одинаковых функций быть не должно.
Теперь заменим все `require` на `require_once` и запустим снова:
Ура, работает! Но обратим внимание на то, что файл подключился только один раз.
Теперь вновь переименуем файл `2.php` в `1.php` и запустим «index.php».
`Require_once`, так же как и `require` завершает выполнение скрипта, если не найден файл указанный для подключения. Заменим `require_once` на `include_once`:
Ошибок стало больше, но код по-прежнему отработал до конца: end в конце картинки это подтверждает. Внесем правки в «index.php»:
<!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php include_once 'test/1.php'; include_once 'test/1.php'; include_once 'test/1.php'; include_once 'test/1.php'; echo "<p>End</p>"; ?> </body> </html>
Запустим код:
Подведём итоги
Чтобы подключить PHP-файлы, можно воспользоваться четырьмя похожими инструкциями — `include` и `include_once`, `require` и `require_once`.
- Разница между `include` и `require`: при отсутствии файла последняя выводит фатальную ошибку, а первая — нет.
- Разница между `include` и `include_once` (а также `require` и `require_once` соответственно): инструкции с “once” проверяют перед подключением, был ли этот файл подключен ранее. Если он подключался, повторного подключения не произойдет.
- Разница между `require_once` и `include_once`: думаю, она понятна из двух предыдущих пунктов 🙂
Если вы хотите освоить PHP во всей его полноте — приглашаем вас на курсы PHP-разработки в GeekBrains. За шесть месяцев вы изучите не только работу с PHP, но и другие важные в профессии технологии — фреймворк Laravel, базы данных MS SQL и Postgre SQL, основы HTML/CSS и ООП. А также сможете пройти полноценную онлайн-стажировку!