PHP: Class not found — что делать
PHP не нашёл класс, который скрипт пытается использовать. Класс берётся из библиотеки Composer, из файлов самого сайта или из модуля PHP. Имя класса в сообщении подскажет, откуда он должен был взяться.
Содержание 8
Как выглядит ошибка
PHP Fatal error: Uncaught Error: Class "Monolog\Logger" not found in /var/www/example.com/index.php:7Class "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 |
|---|---|---|
ZipArchive | php8.3-zip | zip |
DOMDocument, SimpleXMLElement | php8.3-xml | dom, SimpleXML |
NumberFormatter, Collator | php8.3-intl | intl |
SQLite3 | php8.3-sqlite3 | sqlite3 |
mysqli | php8.3-mysql | mysqli — подробнее |
Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
- Обновите список пакетов:
sudo apt update. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Поставьте пакет из таблицы, например
sudo apt install php8.3-zip. На вопросDo you want to continue? [Y/n]нажмите Y и Enter. - Проверьте, что модуль появился:
php -mвыведет список модулей PHP, имя нужного должно быть в нём. - Перезапустите PHP-FPM, чтобы сайт увидел модуль:
sudo systemctl restart php8.3-fpm. Если команда ничего не ответила, PHP перезапущен. - Откройте страницу ещё раз.
Команды — для 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 | найдите её в списке |
Источники
- Исходный код PHP 8.3.6: zend_execute_API.c — текст Maximum execution time of … seconds exceeded и Class "…" not found.
- Composer: Basic usage, раздел Autoloading — подключение vendor/autoload.php через __DIR__ и dump-autoload.
- Composer: Basic usage — composer install ставит в папку vendor версии из composer.lock.
- Справка PHP: класс ZipArchive — класс модуля Zip.
- Справка PHP: класс NumberFormatter — класс модуля intl.
- Пакет php8.3-zip в Ubuntu 24.04 — модуль Zip для PHP 8.3.
- Пакет php8.3-xml в Ubuntu 24.04 — модули DOM, SimpleXML, XML и XSL для PHP 8.3.
- Пакет php8.3-intl в Ubuntu 24.04 — модуль intl для PHP 8.3.
- Пакет php8.3-sqlite3 в Ubuntu 24.04 — модуль SQLite3 для PHP 8.3.
Сверено 14 октября 2026 года.
Что почитать дальше
- Ошибки PHPкак читать сообщение и где журнал.
- Как установить Composer на Ubuntucomposer install и модули PHP.
- Как установить PHP на UbuntuPHP-FPM и модули.