Как подключить файл в PHP
<?php
require __DIR__ . '/header.php';Так подключается файл header.php из той же папки, где лежит текущий файл. Код из подключённого файла выполняется в этом месте, как будто вставлен сюда, и видит все переменные, созданные выше.
Какую команду выбрать
| Команда | Нет файла | Уже подключён |
|---|---|---|
require | фатальная ошибка, остановка | подключит снова |
include | предупреждение, работа продолжается | подключит снова |
require_once | фатальная ошибка, остановка | пропустит |
include_once | предупреждение, работа продолжается | пропустит |
- Шапка, подвал, куски страницы —
require. - Файлы с функциями, классами и настройками —
require_once: второе подключение вызвало бы ошибкуCannot redeclare. include— только если страница должна работать и без этого файла (например, необязательный рекламный блок).
Путь к файлу
Пишите путь от __DIR__ — папки текущего файла. Тогда подключение работает, откуда бы ни запускался скрипт:
<?php
require __DIR__ . '/inc/functions.php';
require __DIR__ . '/../config.php';
require dirname(__DIR__) . '/config.php';Первая строка — файл во вложенной папке inc, вторая и третья — один и тот же файл уровнем выше (dirname отрезает последнюю папку пути).
Пути без __DIR__ (require 'inc/functions.php' или require '../config.php') PHP ищет по списку папок include_path и от текущей рабочей папки, а пути с ./ и ../ — только от рабочей папки. Когда один подключённый файл подключает другой, рабочая папка остаётся папкой первого скрипта, и такой путь может указать не туда.
Ошибка «Failed to open stream»
Warning: require(inc/functions.php): Failed to open stream: No such file or directory in /var/www/html/index.php on line 2За ней следует фатальная ошибка Failed opening required 'inc/functions.php'. Что проверить:
- путь — замените на
__DIR__ . '/inc/functions.php'; - регистр букв: на Linux
Functions.phpиfunctions.php— разные файлы, а в Windows — один; - что файл действительно выложен на сервер в эту папку;
- права: при
Permission deniedвместоNo such file or directoryфайл есть, но веб-сервер не может его прочитать.
Файл возвращает значение
Подключённый файл может вернуть значение через return — обычно так хранят настройки:
<?php
return [
'site_name' => 'Каталог',
'per_page' => 20,
];Если это config.php, то $config = require __DIR__ . '/config.php'; положит массив настроек в $config.
Нельзя: имя файла от посетителя
Не подставляйте в include и require значения из $_GET, $_POST и cookie: include $_GET['page']; позволит выполнить или показать любой файл на сервере. Выбирайте файл по ключу из списка разрешённых (пример — в уроке Файлы и подключение).
Подключить файл по адресу http://… по умолчанию нельзя (настройка allow_url_include выключена), и включать её не нужно: это прямой путь к выполнению чужого кода. Для своих библиотек используйте автозагрузку Composer (справка Composer).
Подробно о сборке сайта из частей и о работе с файлами — урок Файлы и подключение.