laravel Не знайдено підтримуваного шифрувача. Довжина шифру та / або ключа недійсна


83

Я будую проект, використовуючи Laravel. Він працював нормально на localhost, але коли я завантажую його на сервер (на сервері встановлено comodo ssl), я отримую таку помилку:

RuntimeException in EncryptionServiceProvider.php line 29:
No supported encrypter found. The cipher and / or key length are invalid
in EncryptionServiceProvider.php line 29
at EncryptionServiceProvider->Illuminate\Encryption\{closure}(object(Application), array()) in Container.php line 733
at Container->build(object(Closure), array()) in Container.php line 626
at Container->make('encrypter', array()) in Application.php line 674
at Application->make('Illuminate\Contracts\Encryption\Encrypter') in Container.php line 837
at Container->resolveClass(object(ReflectionParameter)) in Container.php line 800
at Container->getDependencies(array(object(ReflectionParameter)), array()) in Container.php line 771
at Container->build('SahraSalon\Http\Middleware\EncryptCookies', array()) in Container.php line 626
at Container->make('SahraSalon\Http\Middleware\EncryptCookies', array()) in Application.php line 674
at Application->make('SahraSalon\Http\Middleware\EncryptCookies') in Pipeline.php line 123
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 118
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 86
at Kernel->handle(object(Request)) in index.php line 54

Хтось може допомогти вирішити цю помилку?


У мене теж є це питання зараз, ще гірший stackoverflow.com/questions/37505809 / ...
udemethegrtman

Відповіді:


75

Чи встановлені на сервері всі необхідні розширення?

  • PHP> = 5.5.9
  • Розширення OpenSSL PHP
  • Розширення PDO PHP
  • Mbstring розширення PHP
  • Розширення PHP для маркера

Можливо, вам не вистачає розширення OpenSSL. Крім того, у вас є ключ, встановлений у .envфайлі?


Спробуйте запустити:

php artisan key:generate


Відповідь: 'cipher' => ''не було встановлено.


.env значення: APP_ENV = локальна APP_DEBUG = True APP_KEY = zK7sr9SzegGEDFClzJDs0vAkpO8NvjZA DB_HOST = локальний DB_DATABASE = присадибні DB_USERNAME = присадибні DB_PASSWORD = секрет CACHE_DRIVER = файл SESSION_DRIVER = файл QUEUE_DRIVER = синхронізація MAIL_DRIVER = MAIL_HOST = SMTP mailtrap.io MAIL_PORT = 2525 MAIL_USERNAME = нуль MAIL_PASSWORD = null MAIL_ENCRYPTION = null
Рахман за

2
Ваш 'cipher' => 'AES-256-CBC'вconfig/app.php
Salkz

33
І запустіть, php artisan key:generateщоб згенерувати новий ключ.
Salkz

@Rahmanza У мене є всі ці розширення, я змінив тип свого шифру і php artisan key:generateнамагався вирішити проблему, але вона не зникає. Чи можуть мої маршрути мати щось спільне з цим: `` Route :: group (['middleware' => ['web']], function () {Route :: get ('/ login', 'PublicController @ login' ); Route :: post ('/ login', 'AuthenticationController @ login'); Route :: group (['prefix' => 'admin', 'middleware' => 'auth'], function () {route: : get ('dashboard', function () {echo 'in dash';});});}); ``
Том Берд

95

Ви вводите лише в консолі:

php artisan key:generate

І якщо ваш app.php не змінює цей ключ, змініть його вручну.


Далі, якщо вам трапиться отримати це повідомлення про помилку:

[ErrorException]
file_get_contents ( /path/to/my/project/.env ): не вдалося відкрити потік: такого файлу або каталогу немає

Потім скопіюйте .env.exampleфайл і повторіть спробу:

cp .env.example .env
php artisan key:generate

2
І перевірте, чи встановлені всі необхідні розширення.
Рафаель Бугаєвський

2
перед копією .env.example to .env
Alex

9

У мене була та сама проблема раніше, і я виправив це наступним чином: Перейдіть до config / app.php, змініть "cipher" => "anything"на

'cipher' => MCRYPT_RIJNDAEL_128,

значення за замовчуванням, 'cipher' => 'AES-256-CBC',але це повинно бути без лапки !! Дивно.
Вебінан

Це теж мені допомогло, я не мав AES-256-CBCу списку підтримуваних шифрів, як з’ясувалося зphpinfo()
Юрій Дячков

8

Я виправив це, запустивши це:

php artisan config:cache

У моєму випадку я вперше використовував Deployer. Коли я посилав проект на папку / current, я отримав помилку шифрування. Створення файлу кешу це виправило.
thomas_inckx

7

Я просто виправляю помилку.

  1. Shift+Click правою кнопкою миші "відкрити вікно похвали тут" у вашому кореневому проекті.
  2. В консолі пишіть: "php artisan key:generate".
  3. Отримайте 32 символи "Позначити" config/app.phpяк 'key' => env('APP_KEY', 'insert get 32 char key')лайк, // рядок номер 81

5

У моєму випадку мені потрібно ввімкнути розширення mcrypt.

Але спочатку перевірте, чи він у вас уже є:

$ sudo apt-get install -y mcrypt php5-mcrypt

Перевірте, чи завантажений модуль mcrypt:

$ php -m | grep mcrypt

якщо нічого не відображається, це тому, що не завантажено, але ви вже встановили вище, чи не так? Отже, зробіть так:

$ php5enmod mcrypt
$ sudo service apache2 restart

Перевірте ще раз, і ви побачите mcrypt замість нічого. Це хороший знак, перезавантажте програму і виправте наступну помилку;)

$ php -m | grep mcrypt
mcrypt

5

Якщо у .env.exampleфайлі є кореневий каталог, змініть його на .envта запустіть php artisan key:generate. Це спрацювало для мене.


4

писати в консолі php artisan key:generate

ви отримаєте повідомлення типу: Application key [get 32 char key] set successfully.

замінити ключ програми на config/app.phpлайк'key' => env('APP_KEY', 'insert get 32 char key'),//line number 81


На жаль, я використовую WAMP, але я не знаю, чи знаходиться config/app.phpфайл. Не могли б ви повідомити мене про це?
Джуліан Морено

1
перший, ви йдете вас project folderв , wamp serverа потім ви знайдете configпапку , то ви отримаєте app.php. спасибі
Md Shahadat Hossain

4

вирішено за допомогою:

php ремісничий ключ: генерувати


3

якщо ви використовуєте конфігураційний файл app.php замість читання ключа з файлу .env, тоді ви можете видалити функцію env () для змінної ключа, наприклад:

'key' = env('someRandom36CharsString'),

до

'key' = 'someRandom36CharsString',

2

Мені вдалося вирішити розгортання на реальному сервері Ubuntu, ось всі кроки

Переконайтесь, що PHP> = 5.5.9

Переконайтеся, що встановлені OpenSSL, Mbstring, Tokenizer та mcrypt.

Щоб встановити mcrypt в PHP (Ubuntu):

sudo apt-get install php5-mcrypt,
sudo php5enmod mcrypt

Зробіть папку для зберігання доступною для запису:

chmod -R 0777 storage

Зробіть Apache використовувати папку Lavarel / public як домашню:

DocumentRoot /home/code2/public_html/Laravel-Project/public
    <Directory "/home/code2/public_html/Laravel-Project/public”> 
         AllowOverride all 
    </Directory>

Основна проблема для мене - FTP може не копіювати приховані файли за замовчуванням: .envі вони /public/.htaccessповинні бути там!

Після виконання вищевказаних завдань він працював на сервері Ubuntu


1

Я страждав від цієї проблеми протягом декількох годин, перш ніж виявив, що ключ кешований у bootstrap \ cache \ config.php. Видалив файл, і мій сайт завантажився нормально (тобто в іншому випадку не було проблем з моєю конфігурацією).

Я виявив це, додавши деякий вивід налагодження до boostrap \ cache \ compiled.php, щоб він виплюнув шифр і ключ (десь біля рядка 7010). Потім розкопав, щоб побачити, як він забирає конфіг, і виявив, що він використовує файл конфігурації кешу.


1

Переконайтесь, що у вас є ці вимоги до машини.

  1. PHP> = 5.6.4
  2. Розширення OpenSSL PHP
  3. Розширення PDO PHP
  4. Mbstring розширення PHP
  5. Розширення PHP для маркера
  6. Розширення XML PHP

Потім після інсталяції або оновлення проекту до

оновлення композитора

Після цього у вас є--

.env.example

Створіть дублікат і перейменуйте його на -

.env

та вносити зміни відповідно до конфігурації бази даних або будь-яких інших модифікацій, які вам потрібні.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your db name
DB_USERNAME=username if any otherwise root
DB_PASSWORD= your password if not set leave blank

Нарешті згенеруйте ключ програми за допомогою:

php ремісничий ключ: генерувати

Для когось може бути достатньо лише останнього кроку. Але у мене така проблема виникає кожного разу, коли я клоную будь-який проект laravel. Весь цей крок робить це з будь-якою небезпекою.


0

Додайте, "illuminate/html": "~5.0"щоб вимагати розділ вашого composer.jsonфайлу. Просто так:

...
"require": {
    ...
    "illuminate/html": "~5.0"
    ...
},
...

Потім запустіть composer installкоманду. Коли composer installзавершиться. бігти php artisan key:generate. Ви отримаєте таке повідомлення:

Application key [get 32 char key] set successfully.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.