PHP: Failed to open stream: No such file or directory — что делать
PHP не нашёл файл, который скрипт подключает через include или require. Файла нет, в имени другие большие и маленькие буквы или относительный путь считается не от той папки. Надёжный способ — путь от __DIR__.
Содержание 8
Как выглядит ошибка
Если файл подключают через require, в журнале две записи:
PHP Warning: require(config.php): Failed to open stream: No such file or directory in /var/www/example.com/index.php on line 3
PHP Fatal error: Uncaught Error: Failed opening required 'config.php' (include_path='…') in /var/www/example.com/index.php:3require(config.php)— файл, который скрипт пытался подключить, — ровно так, как он записан в коде.No such file or directory— по этому пути файла нет.in /var/www/example.com/index.php on line 3— файл и строка, где стоит require.include_path='…'— папки, где PHP искал файл, если путь в коде без./и../.
require без файла останавливает скрипт — посетитель видит ошибку 500. include только предупреждает: вместо второй записи будет Failed opening 'config.php' for inclusion, а страница откроется без подключённой части. На сайте под nginx записи лежат в журнале nginx: sudo tail -n 30 /var/log/nginx/error.log.
Проверьте, есть ли файл
Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Посмотрите, есть ли файл по полному пути — папку сайта возьмите из сообщения:
ls -l /var/www/example.com/config.phpЕсли файла нет, ls ответит No such file or directory. Поищите файл в папке сайта по имени без учёта больших и маленьких букв:
find /var/www/example.com -iname 'config.php'- Файл не нашёлся — его нет на сервере: он не скопировался при переносе или удалён. Верните его из резервной копии или с компьютера, где лежит сайт.
- Нашёлся
Config.php— в Linux большие и маленькие буквы в именах различаются, и config.php и Config.php — разные файлы. Переименуйте файл или исправьте имя в коде. - Нашёлся в другой папке — путь в коде считается не от той папки, см. ниже.
Если путь считается не от той папки
Пути в коде с ./ и ../ PHP считает от текущей папки. Когда страницу открывают через nginx, текущая папка — та, где лежит открытый скрипт, например index.php. А строка require может стоять в другом файле из подпапки, и путь, верный для него, для index.php окажется неверным.
Надёжный способ — строить путь от __DIR__. Это папка того файла, в котором написана строка, без косой черты в конце:
require __DIR__ . '/config.php';
require __DIR__ . '/../lib/functions.php';Такой путь не зависит от того, откуда запустили скрипт. Если это чужая программа или плагин — передайте сообщение разработчику.
Если скрипт запускают из командной строки или cron
Из командной строки текущая папка — та, где вы запустили команду, а не папка скрипта. Поэтому скрипт, который работает в браузере, из cron может не найти свои файлы. Перейдите в папку скрипта перед запуском:
cd /var/www/example.com && php script.phpТак же записывайте и задание в cron. Второй способ — пути от __DIR__ в самом скрипте.
Если не найден vendor/autoload.php
PHP Warning: require(/var/www/example.com/vendor/autoload.php): Failed to open stream: No such file or directory in /var/www/example.com/index.php on line 2Папку vendor с библиотеками создаёт Composer. Если её нет — например, код скопирован без неё, — поставьте библиотеки. Перейдите в папку проекта, где лежит composer.json, и выполните команду от своего пользователя, без sudo:
cd /var/www/example.com
composer installЕсли Composer не установлен или просит модули PHP — Как установить Composer на Ubuntu.
Ошибки рядом
| Что видите | Что делать |
|---|---|
Failed to open stream: Permission denied | файл есть, но PHP не хватает прав |
Class "…" not found | не подключён автозагрузчик или нет библиотеки |
Call to undefined function | функции нет или не стоит модуль |
| другая ошибка PHP | найдите её в списке |
Источники
- Исходный код PHP 8.3.6: streams.c — текст Failed to open stream и причина после двоеточия.
- Исходный код PHP 8.3.6: main.c — приставки PHP Startup и PHP Request Startup, тексты Failed opening и Failed opening required; при фатальной ошибке и выключенном display_errors PHP отвечает кодом 500.
- Справка PHP: include — пути с ./ и ../ считаются от текущей папки; include выдаёт предупреждение, require — ошибку.
- Справка PHP: require — если файла нет, скрипт останавливается.
- Справка PHP: магические константы — __DIR__ — папка файла, в котором написана строка.
- Composer: Basic usage, раздел Autoloading — подключение vendor/autoload.php через __DIR__ и dump-autoload.
- Справка find для Ubuntu 24.04 — ключ -iname ищет файл по имени без учёта больших и маленьких букв.
Сверено 14 октября 2026 года.
Что почитать дальше
- Ошибки PHPкак читать сообщение и где журнал.
- Как установить Composer на Ubuntucomposer install и модули PHP.
- Резервные копии сайтачтобы было откуда вернуть файл.