2016-12-08 91 views
18

我爲所有項目使用Laravel 5.0。昨天,我已經將我的PHP版本從7.0.x更新到了7.1.0版本。更新完畢後,我試圖打開我的Laravel項目,看到下面這條消息:PHP7.1和Laravel 5.3:函數mcrypt_get_iv_size()已棄用

ErrorException in Encrypter.php line 303: 
Function mcrypt_get_iv_size() is deprecated 

in Encrypter.php line 303 
at HandleExceptions->handleError('8192', 'Function mcrypt_get_iv_size() is deprecated', 'C:\wamp64\www\project1\vendor\laravel\framework\src\Illuminate\Encryption\Encrypter.php', '303', array()) in Encrypter.php line 303 

可我知道我該怎麼解決這個問題?使用Laravel 5.3解決問題嗎?我不想將我的Laravel升級到5.3,因爲這是一個巨大的項目,需要很長時間才能更新。這兩個版本之間有太多的區別。許多代碼需要修改。

有沒有更簡單的方法來解決這個問題?

+0

你不能使用'openssl_cipher_iv_length'嗎? – Irvin

+0

最好不要使用mcrypt,它是棄用的,多年未更新,不支持標準的PKCS#7(néePKCS#5)填充,只有非標準的null填充甚至不能用於二進制數據。 mcrypt有很多優秀的[bug](https://sourceforge.net/p/mcrypt/bugs/),可以追溯到2003年.mcrypt-extension已被棄用,將在PHP 7.2中被刪除。請考慮使用[defuse](https://github.com/defuse/php-encryption)或[RNCryptor](https://github.com/RNCryptor),他們提供了一個完整的解決方案,並且正在維護和正確。 – zaph

回答

21

發生此錯誤是因爲除AES-256-CBC之外,您的config/app.php文件中的密碼可能與mcrypt擴展名有關。也許你正在使用MCRYPT_RIJNDAEL_256MCRYPT_RIJNDAEL_128

如果沒有成熟的Laravel升級,您可以做的最好的事情是安裝legacy encrypter並使用它來更新所有加密數據以使用自Laravel 5.1以來默認密碼的AES-256-CBC密碼相信。一旦你這樣做了,你應該可以爲你的Laravel應用程序使用PHP 7.1。

+0

在config/app.php中更改'cipher'不會幫助:''cipher'=>'AES-256-CBC',' – Debiprasad

+0

更改密碼只是過程的一部分。除非應用程序中的其他內容正在使用mcrypt,否則使用該密碼應該可以停止mcrypt錯誤。 –

15

在你config/app.php配置文件,您應該更新密碼,以"AES-256-CBC"和您的項設置爲可以使用php artisan key:generate

+0

爲我工作。我不得不重新使用php工匠的關鍵:生成。我嘗試不重新生成密鑰,它不起作用。後記,它確實。 – zvineyard

0

解決這個只是改變從'MCRYPT_RIJNDAEL_128'到'AES-256-CBC'的app.php中的密碼

相關問題