Avatar ·

Ошибка "No Application Encryption Key Has Been Specified" в Laravel: причины и решение

Всем привет! Я новичок в Laravel и PHP, пытаюсь развернуть свой первый проект на локальном сервере OpenServer. Установил Laravel 5 через Composer, всё прошло успешно. Но когда я захожу на сайт в браузере, вижу только белую страницу с ошибкой:
RuntimeException
No application encryption key has been specified.
Вот мой код из файла `config/app.php` (я его не менял, всё стандартное):
'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',
Я проверил файл `.env` — он существует, но строчки `APP_KEY` там нет вообще. Я пытался вручную добавить ключ, но не знаю, какой формат должен быть. Пробовал скопировать какой-то ключ из интернета — не помогло. Также я заметил, что в папке `storage` нет прав на запись, но я выставил 777 через консоль. Ошибка всё равно остаётся. Подскажите, как правильно исправить эту ошибку? Нужно ли как-то генерировать ключ через Artisan? Если да, то как это сделать на Windows? Я боюсь что-то сломать, так как проект только начат. Версия PHP: 7.4, Laravel Framework 5.8.38. Заранее спасибо за помощь! <<>>

Причина ошибки

Ошибка No application encryption key has been specified возникает, когда Laravel не может найти валидный ключ шифрования в файле .env. Этот ключ необходим для шифрования сессий, cookie-файлов и других данных. Если ключ отсутствует или некорректен — фреймворк отказывается работать.

Правильное решение

Никогда не копируйте ключи из интернета — каждый проект должен иметь уникальный ключ. Используйте встроенную команду Artisan для генерации:

php artisan key:generate

Эта команда автоматически:

  • Сгенерирует 32-символьную случайную строку в формате base64 (например: base64:6Fh3...==)
  • Добавит или обновит строку APP_KEY в файле .env

Если вы работаете на Windows (OpenServer, XAMPP), убедитесь, что:

  • PHP добавлен в системную переменную PATH
  • Команду выполняете из корневой папки проекта (где лежит файл artisan)

Если Artisan не работает

В редких случаях команда может не сработать из-за проблем с окружением. Тогда сгенерируйте ключ вручную:

php -r "echo base64_encode(random_bytes(32));"

Скопируйте полученную строку и добавьте в файл .env:

APP_KEY=base64:ВАШ_СГЕНЕРИРОВАННЫЙ_КЛЮЧ

Проверка файла .env

Убедитесь, что:

  1. Файл .env находится в корне проекта (рядом с artisan)
  2. Он не переименован в .env.example
  3. Строка APP_KEY не закомментирована (нет # в начале)

Сброс кэша конфигурации

После изменения .env обязательно очистите кэш:

php artisan config:clear
php artisan cache:clear

Если после всех действий ошибка остаётся — проверьте права на папку storage:

chmod -R 775 storage
chmod -R 775 bootstrap/cache

На Windows в OpenServer права обычно не нужны, но иногда помогает перезапуск сервера.

После генерации ключа и очистки кэша перезагрузите страницу — ошибка должна исчезнуть. Если нет — проверьте логи в storage/logs/laravel.log.

<<>>

Альтернативный подход: ручная настройка без Artisan

Если Artisan недоступен (например, на хостинге без shell-доступа), можно решить проблему иначе:

  1. Создайте ключ через PHP-скрипт. Создайте временный файл genkey.php в корне проекта с кодом:
    <?php
    echo base64_encode(random_bytes(32));
    ?>
    Запустите его через браузер или консоль: php genkey.php. Скопируйте вывод.
  2. Добавьте ключ в .env через FTP или файловый менеджер хостинга. Строка должна выглядеть так:
    APP_KEY=base64:СГЕНЕРИРОВАННАЯ_СТРОКА
  3. Удалите временный скрипт (genkey.php) — он содержит чувствительные данные.

Этот метод полезен, когда нет доступа к консоли, но он менее безопасен (ключ может быть перехвачен при передаче). Всегда используйте php artisan key:generate при первой возможности.

Также проверьте, не заблокирован ли файл .env для записи — на некоторых хостингах нужно выставить права 644.