Ошибка "No Application Encryption Key Has Been Specified" в Laravel: причины и решение
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
Убедитесь, что:
- Файл
.envнаходится в корне проекта (рядом сartisan) - Он не переименован в
.env.example - Строка
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-доступа), можно решить проблему иначе:
-
Создайте ключ через PHP-скрипт. Создайте временный файл
genkey.phpв корне проекта с кодом:
Запустите его через браузер или консоль:<?php echo base64_encode(random_bytes(32)); ?>php genkey.php. Скопируйте вывод. -
Добавьте ключ в .env через FTP или файловый менеджер хостинга. Строка должна выглядеть так:
APP_KEY=base64:СГЕНЕРИРОВАННАЯ_СТРОКА -
Удалите временный скрипт (
genkey.php) — он содержит чувствительные данные.
Этот метод полезен, когда нет доступа к консоли, но он менее безопасен (ключ может быть перехвачен при передаче). Всегда используйте php artisan key:generate при первой возможности.
Также проверьте, не заблокирован ли файл .env для записи — на некоторых хостингах нужно выставить права 644.