Ошибки

PHP: Failed to open stream: No such file or directory — что делать

PHP не нашёл файл, который скрипт подключает через include или require. Файла нет, в имени другие большие и маленькие буквы или относительный путь считается не от той папки. Надёжный способ — путь от __DIR__.

≈ 5 мин чтения
Содержание 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:3
  • require(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.

Ошибки рядом

Источники

Сверено 14 октября 2026 года.

Что почитать дальше