安裝 ShopEx 等舊版 PHP 系統時常報錯:「服務器 Mcrypt.so 加密庫未安裝」。mcrypt 是 PHP 早期常用的加密擴展,**PHP 7.2 已棄用,7.4 移除**,現代專案應遷移至 openssl 或 sodium。本文針對必須維護舊系統的場景,提供 Windows 環境下啟用 mcrypt 步驟。
php -m | findstr mcrypt
# 或建立 phpinfo.php 頁面檢視
若無輸出,則未載入。
php_mcrypt.dll、libmcrypt.dll、libmhash.dll。若無,從官方對應版本 ZIP 包獲取。libmcrypt.dll、libmhash.dll 複製到 C:\Windows\System32 (64位系統) 或 C:\Windows\SysWOW64 (32位 PHP 運行於 64位系統)。;):extension=php_mcrypt.dll
extension=php_mhash.dll
httpd -k restart 或服務管理器重啟iisreset 或應用程式池回收php -m | findstr mcrypt 或刷新 phpinfo,應顯示 mcrypt support => enabled。| 現象 | 原因 | 解決 |
|---|---|---|
| 重啟後仍不顯示 | 修改錯誤的 php.ini | 執行 php --ini 確認載入的配置文件路徑 |
| Apache 啟動報錯 | DLL 版本不匹配 (VC 編譯版本、線程安全性) | 下載與 PHP 版本完全一致的 DLL (VC11/VC14/VC15, TS/NTS) |
| 缺少 libmcrypt.dll | 未複製到系統目錄 | 複製至 System32/SysWOW64 或 PHP 目錄加入 PATH |
mcrypt 已從 PHP 核心移除**,PECL 仍提供 pecl install mcrypt 但不再維護。請遷移至:
openssl_encrypt()/openssl_decrypt()。sodium_crypto_aead_*() 系列。defuse/php-encryption、paragonie/halite 等經審計的高層封裝。安全警示: mcrypt 實現的加密算法 (如 ECB 模式、靜態 IV) 多不符合現代安全標準。維護舊系統時,應評估加密邏輯風險,規劃遷移至經審計的加密庫。