Windows 下啟用 PHP php_mcrypt.dll 擴展時,常報錯「缺少 libmcrypt.dll」。本文提供標準修復步驟、版本匹配原則與驗證方法。
錯誤現象
PHP Warning: PHP Startup: Unable to load dynamic library 'php_mcrypt.dll'
The specified module could not be found.
實際原因:php_mcrypt.dll 依賴底層 C 庫 libmcrypt.dll,但該 DLL 不在系統 PATH 中。
標準修復步驟
- 編輯 php.ini,啟用擴展:
;extension=php_mcrypt.dll
↓
extension=php_mcrypt.dll
- 複製 libmcrypt.dll 到系統目錄:
- 從 PHP 安裝目錄(如
C:\php)或 php\ext 找到 libmcrypt.dll;
- 複製到
C:\Windows\System32(64 位系統)或 C:\Windows\SysWOW64(32 位 PHP 運行在 64 位系統);
- 或複製到 Apache/bin、Nginx 目錄、或 PHP 根目錄(需在 PATH 中)。
- 重啟 Web 服務器(Apache/Nginx/IIS)及 PHP-FPM 進程。
- 驗證:
php -m | findstr mcrypt 或 phpinfo() 搜尋 mcrypt。
版本匹配關鍵點
| PHP 版本 | VC 編譯版本 | 線程安全性 | libmcrypt.dll 來源 |
| PHP 5.3 - 7.1 | VC9 / VC11 / VC14 | TS (Thread Safe) / NTS | 必須與 PHP 套件完全一致 |
| PHP 7.2+ | 內建 Sodium,mcrypt 已棄用 | - | 不再需要 |
鐵律:libmcrypt.dll 必須與 php_mcrypt.dll 同版本、同 VC 編譯、同 TS/NTS。混用會導致啟動崩潰或運行時崩潰。
常見避坑
- 從網上隨意下載 libmcrypt.dll:版本不匹配導致
0xc000007b 錯誤;
- 放入 System32 但運行 32 位 PHP:需放入
SysWOW64 或 PHP 目錄;
- 多 PHP 版本共存:各自擁有獨立 ext 目錄,勿混用 DLL;
- IIS FastCGI:需重啟應用池,甚至重啟 IIS Admin Service。
現代替代方案:Sodium / OpenSSL
PHP 7.2+ 已移除 mcrypt,官方推薦:
- libsodium(
ext-sodium):現代加密庫,支援加密、簽名、密鑰派生、AEAD;
- OpenSSL(
ext-openssl):TLS、對稱/非對稱加密、證書操作。
// mcrypt 加密 → Sodium 等價
// 舊:mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv)
// 新:
$key = sodium_crypto_aead_aes256gcm_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES);
$ciphertext = sodium_crypto_aead_aes256gcm_encrypt($data, '', $nonce, $key);
遷移建議
- 新項目直接使用 Sodium/OpenSSL;
- 存量 mcrypt 項目:評估加密數據兼容性,制定遷移計劃(雙寫過渡期);
- 若必須維護 PHP 5.6/7.0 老項目,鎖定對應版本 DLL,容器化部署鎖定環境。
解決 DLL 依賴只是權宜之計,拥抱現代加密庫才是長久之道。
- 上一篇文章: PHP 入門教學:if / else / elseif 條件判斷完整指南
- 下一篇文章: PHP 日期時間處理大全:時間戳、格式化、計算、DateAdd/DateDiff 移植實現
Copyright ©
程式碼之家 All Rights Reserved