PHP LinuxWindows

PHP: Fatal error: Uncaught Error: Class not found

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

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

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Автозагрузка Composer
  5. Пространства имён и файлы
  6. Расширения и среда

#Что означает ошибка

Сообщение
PHP Fatal error: Uncaught Error: Class "App\Models\User" not found

Fatal error: Uncaught Error: Class "App\Models\User" not found означает, что PHP не смог найти определение класса. Причины: не подключён автозагрузчик Composer, неверное пространство имён или регистр, файл лежит не там, где ожидает PSR-4, или кэш автозагрузки устарел.

На Linux имена файлов и классов чувствительны к регистру.

Проверьте автозагрузку и соответствие структуры.

PHP не нашёл класс: файл не подключён, неверно указано пространство имён, не обновлён автозагрузчик Composer или отличается регистр имени файла на Linux.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Не обновлён автозагрузчик ComposerДобавили новый класс.Выполните composer dump-autoload.
Неверный namespace или useПространство имён не совпадает с путём.Согласуйте namespace с PSR-4.
Регистр имени файлаРаботает на Windows, не работает на Linux.Приведите регистр в соответствие.
Файл не подключёнНет require или autoload.Подключите автозагрузчик.

#Пошаговое решение

  1. Подключите vendor/autoload.phpВ журнале PHP найдите полное имя отсутствующего класса, имя файла и строку ошибки. Если проект использует Composer, в точке входа приложения найдите подключение require __DIR__ . "/vendor/autoload.php";, адаптировав путь к реальному расположению. Убедитесь, что файл существует и доступен пользователю PHP-FPM; не подключайте автозагрузчик повторно во всех классах.
  2. Выполните composer dump-autoloadОткройте терминал в корне проекта, где лежит composer.json, и выполните composer dump-autoload -o под учётной записью владельца проекта. Команда обновляет файлы автозагрузки, не загружая новые зависимости. Если отсутствует каталог vendor, после резервной копии и сверки composer.lock установите зависимости на стенде через composer install --no-dev с учётом требований проекта.
  3. Сверьте namespace и путь к файлуВ composer.json откройте раздел autoload.psr-4, найдите префикс пространства имён и сопоставьте его с каталогом и именем PHP-файла. Например, App\Service\Mailer должен иметь правильный namespace и совпадать по регистру с именем на диске; Linux различает прописные и строчные буквы. После исправления повторно выполните composer dump-autoload -o.
  4. Проверьте use и обратную косую чертуПроверьте верх файла с обращением к классу: строку use Полное\Имя\Класса; или запись с ведущим \ для обращения из текущего namespace. Сравните полное имя в сообщении ошибки с объявлением class/interface/enum. Если класс переименован, исправьте импорты и сбросьте штатный кэш приложения или OPcache только по необходимости.
  5. Для классов расширений проверьте php -mЕсли ошибка относится к встроенному классу расширения (PDO, ZipArchive, Imagick), проверьте версию и модули именно веб-PHP, а не только php -m в консоли: версия CLI может отличаться от PHP-FPM. Через временную закрытую диагностическую страницу или панель хостинга выясните список модулей; установку нужного расширения согласуйте с администратором и удалите диагностическую страницу после проверки.
  6. Пересборка карты классов
    Linux · Терминал (Bash)Команда
    Пересборка карты классов.
    composer dump-autoload

#Автозагрузка Composer

Подключите require __DIR__ . '/vendor/autoload.php'; один раз в точке входа. Обновите карту классов: composer dump-autoload -o. Установите зависимости: composer install. Проверьте раздел autoload в composer.json: "psr-4": {"App\\": "src/"}. После правки секции всегда выполняйте composer dump-autoload. Проверьте, загружена ли библиотека: composer show vendor/package.

#Пространства имён и файлы

Класс App\Models\User должен лежать в src/Models/User.php (для PSR-4 с префиксом App\ → src/) и иметь namespace App\Models;. Имя файла равно имени класса с тем же регистром: user.php не подойдёт на Linux. Проверьте use в файле и опечатки. Для классов PHP без пространства имён используйте обратную косую черту: \DateTime, иначе PHP ищет App\DateTime.

#Расширения и среда

Если не найден класс расширения (PDO, mysqli, ZipArchive, Redis), установите модуль: sudo apt install php8.3-mysql php8.3-zip и перезапустите PHP-FPM; проверьте php -m. На хостинге учитывайте разные версии PHP для CLI и веб. Включите отчёт об ошибках в разработке и проверьте, что деплой скопировал каталог vendor. Для автозагрузки без Composer используйте spl_autoload_register.

Linux · Терминал (Bash)Команда
Установка зависимостей, пересборка автозагрузчика и проверка расширений PHP.
composer install
composer dump-autoload -o
php -m | grep -i -E "pdo|mysqli|zip"

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.