Magento2.2於php7.1上修正 “mcrypt_module_open() is deprecated”問題
原先在magento2.1以前都尚未支援php7.1, 而在magento2.2開始正式支援了.
在官方手冊中的敘述: The mcrypt extension has been abandonware for nearly a decade now, and was also fairly complex to use. It has therefore been deprecated in favour of OpenSSL, where it will be removed from the core and into PECL in PHP 7.2.
我們可以發現php7.1已開始建議使用者使用OpenSSL來替代mcrypt 這個extension並會在php7.2從核心中正式移除且移至PECL, 到時候就必須自行去回來編譯安裝, 不過目前7.1上還是能夠在php安裝包中找到及使用.
若各位因開發必須使用mcrypt, 尤其是當我們在Magento上二次開發時, 幾乎都會碰到各種第三方如金流等等的library, 而這些library常會使用到mycrypt的加密函數
這時候在php7.1之後版本上就會出現錯誤警告了
eg.
像是
Function mcrypt_get_block_size() is deprecated
或是
Function mcrypt_module_open() is deprecated
這些跟php已棄用mcrypt有關的訊息.
這時候只好請大家降低版本, 或是跟著我們以下的簡單方式來解決問題囉
修正mcrypt is deprecated”問題
這問題就是因為php提醒你這函數已棄用了, 但這提醒並不是指這函數或extension完全不能使用.
我們只要忽略這個警告就可以了.
使用php的 error_reporting(0); 這個函數
error_reporting(E_ALL & ~E_DEPRECATED); E_ALL
指的是打開所有錯誤回報
~E_DEPRECATED
而關鍵在於上面這行’~’表示忽略 所以這邊是忽略棄用回報
所以就這結果
我們只要在回報出現錯誤的程式碼前加上
error_reporting(E_ALL & ~E_DEPRECATED);
忽略棄用並打開其他的錯誤回報
這樣就可以解決php7.1以上版本提示mcrypt extension的函數已經被棄用的問題囉
當然我們也可以修改Magento/Framework/Encryption/Crypt.php 在其中加上那段程式碼
或是建立簡單的module去override它來解決唷
若想了解更多關於Magento的相關教學,可以追蹤我們的Facebook粉絲專頁,跟著我們歐斯瑞一起學習吧!
我要留言