首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP mcrypt 擴展依賴 libmcrypt.dll 解決方案:Windows 環境配置指南

     編輯:PHP 相關知識

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 中。

標準修復步驟

  1. 編輯 php.ini,啟用擴展:
    ;extension=php_mcrypt.dll
    ↓
    extension=php_mcrypt.dll
  2. 複製 libmcrypt.dll 到系統目錄:
    • 從 PHP 安裝目錄(如 C:\php)或 php\ext 找到 libmcrypt.dll;
    • 複製到 C:\Windows\System32(64 位系統)或 C:\Windows\SysWOW64(32 位 PHP 運行在 64 位系統);
    • 或複製到 Apache/bin、Nginx 目錄、或 PHP 根目錄(需在 PATH 中)。
  3. 重啟 Web 服務器(Apache/Nginx/IIS)及 PHP-FPM 進程。
  4. 驗證:php -m | findstr mcrypt 或 phpinfo() 搜尋 mcrypt。

版本匹配關鍵點

鐵律:libmcrypt.dll 必須與 php_mcrypt.dll 同版本、同 VC 編譯、同 TS/NTS。混用會導致啟動崩潰或運行時崩潰。

常見避坑

  1. 從網上隨意下載 libmcrypt.dll:版本不匹配導致 0xc000007b 錯誤;
  2. 放入 System32 但運行 32 位 PHP:需放入 SysWOW64 或 PHP 目錄;
  3. 多 PHP 版本共存:各自擁有獨立 ext 目錄,勿混用 DLL;
  4. 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);

遷移建議

  1. 新項目直接使用 Sodium/OpenSSL;
  2. 存量 mcrypt 項目:評估加密數據兼容性,制定遷移計劃(雙寫過渡期);
  3. 若必須維護 PHP 5.6/7.0 老項目,鎖定對應版本 DLL,容器化部署鎖定環境。

解決 DLL 依賴只是權宜之計,拥抱現代加密庫才是長久之道。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
PHP 版本VC 編譯版本線程安全性libmcrypt.dll 來源
PHP 5.3 - 7.1VC9 / VC11 / VC14TS (Thread Safe) / NTS必須與 PHP 套件完全一致
PHP 7.2+內建 Sodium,mcrypt 已棄用-不再需要