Ошибки

PHP: Class not found — что делать

PHP не нашёл класс, который скрипт пытается использовать. Класс берётся из библиотеки Composer, из файлов самого сайта или из модуля PHP. Имя класса в сообщении подскажет, откуда он должен был взяться.

≈ 6 мин чтения
Содержание 8

Как выглядит ошибка

PHP Fatal error:  Uncaught Error: Class "Monolog\Logger" not found in /var/www/example.com/index.php:7
  • Class "Monolog\Logger" — имя класса, которого нет. Части через обратную косую черту — пространство имён: первая часть подсказывает, чья это библиотека.
  • in /var/www/example.com/index.php:7 — файл и строка, где класс понадобился.

Это фатальная ошибка: скрипт останавливается, посетитель видит ошибку 500. В журнале после этой строки идут строки Stack trace: — цепочка вызовов, которая привела к ошибке. Для поиска причины хватает первой строки. На сайте под nginx сообщение лежит в журнале nginx: sudo tail -n 30 /var/log/nginx/error.log.

Какой случай у вас

Имя класса в сообщенииОткуда он берётсяЧто делать
ZipArchive, DOMDocument, NumberFormatter, SQLite3, mysqliмодуль PHPпоставить модуль
с пространством имён, а в папке сайта есть composer.jsonбиблиотека Composerпоставить библиотеки и подключить автозагрузку
класс самого сайта, например App\Models\Userфайлы сайтапроверить имя файла

Если класс из модуля PHP

Часть классов встроена не в сам PHP, а в модули, и модуль ставится отдельным пакетом:

КлассПакетИмя модуля в php -m
ZipArchivephp8.3-zipzip
DOMDocument, SimpleXMLElementphp8.3-xmldom, SimpleXML
NumberFormatter, Collatorphp8.3-intlintl
SQLite3php8.3-sqlite3sqlite3
mysqliphp8.3-mysqlmysqli — подробнее

Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.

  1. Обновите список пакетов: sudo apt update. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter.
  2. Поставьте пакет из таблицы, например sudo apt install php8.3-zip. На вопрос Do you want to continue? [Y/n] нажмите Y и Enter.
  3. Проверьте, что модуль появился: php -m выведет список модулей PHP, имя нужного должно быть в нём.
  4. Перезапустите PHP-FPM, чтобы сайт увидел модуль: sudo systemctl restart php8.3-fpm. Если команда ничего не ответила, PHP перезапущен.
  5. Откройте страницу ещё раз.

Команды — для PHP 8.3 из Ubuntu 24.04. В Ubuntu 26.04 стоит PHP 8.5: в путях и командах вместо 8.3 пишите 8.5. Какая версия у вас, покажет ls /etc/php/. Если apt пишет Unable to locate package — разбор этой ошибки.

Если класс из библиотеки Composer

Composer — менеджер пакетов PHP: по списку в composer.json он скачивает библиотеки в папку vendor и создаёт файл vendor/autoload.php. Этот файл подключает классы библиотек сам, когда они понадобятся. Посмотрите, есть ли папка vendor:

ls /var/www/example.com/vendor/autoload.php

Ответ No such file or directory — библиотеки не поставлены: код скопировали без vendor. Перейдите в папку, где лежит composer.json, и поставьте их от своего пользователя, без sudo:

cd /var/www/example.com
composer install

Если Composer не установлен или пишет, что не хватает модуля PHP, — Как установить Composer на Ubuntu.

Если файл есть, проверьте, что скрипт его подключает. В начале главного файла, до первого обращения к классам, должна быть строка:

require __DIR__ . '/vendor/autoload.php';

Если библиотеки в composer.json нет совсем, composer install её не поставит. Тогда ошибку исправляет разработчик сайта: добавляет библиотеку в проект.

Если класс из файлов сайта

Классы самого сайта Composer тоже может подключать сам — по правилу PSR-4: имя класса превращается в путь к файлу. Например, App\Models\User ищется в файле Models/User.php внутри папки, которая указана для App в разделе autoload файла composer.json.

  • Большие и маленькие буквы. В Linux User.php и user.php — разные файлы. Код, который работал на компьютере с Windows или macOS, на сервере может не найти класс. Имя файла должно совпадать с именем класса буква в букву.
  • Новые файлы или правка composer.json. Если меняли раздел autoload в composer.json, пересоберите автозагрузку в папке проекта: composer dump-autoload.
  • Файл не скопировался. Проверьте, что он есть на сервере: ls -l с путём к файлу.

Если сайт — готовая программа, например интернет-магазин или фреймворк, обновите его или передайте сообщение разработчику целиком.

Ошибки рядом

Что видитеЧто делать
Failed to open stream: No such file or directory про vendor/autoload.phpнет папки vendor
Call to undefined functionфункции нет или не стоит модуль
could not find driverнет модуля PDO для базы
другая ошибка PHPнайдите её в списке

Источники

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

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