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

CentOS 6.3 手動編譯安裝 PHP mcrypt 擴展完整教程

     編輯:PHP 綜合知識

注意:PHP 7.2+ 已棄用 mcrypt,PHP 7.3+ 完全移除。本教程適用於維護 PHP 5.3/5.6/7.0/7.1 老項目。新項目請使用 OpenSSL (openssl_encrypt) 或 libsodium (sodium_*) 替代。

環境信息

  • OS: CentOS 6.3 (x86_64)
  • Apache: httpd-2.4.2
  • PHP: php-5.3.21 (安裝路徑 /usr/local/php5)

依賴關係:libmcrypt → mhash → mcrypt

三者必須按順序安裝,後者依賴前者的庫文件和頭文件。

1. 安裝 libmcrypt (核心加密庫)

# 下載
wget https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download -O libmcrypt-2.5.8.tar.gz

# 解壓編譯
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/usr/local/libmcrypt --enable-shared
make && make install

# 驗證
ls /usr/local/libmcrypt/lib/libmcrypt*
# 應看到 libmcrypt.so, libmcrypt.la 等

2. 安裝 mhash (哈希庫,mcrypt 可選依賴)

wget https://sourceforge.net/projects/mhash/files/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz/download -O mhash-0.9.9.9.tar.gz
tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9

# 關鍵:使用 phpize 生成配置腳本,指定 php-config 路徑
/usr/local/php5/bin/phpize
./configure --with-php-config=/usr/local/php5/bin/php-config
make && make install

3. 安裝 mcrypt (PHP 擴展所需庫)

wget https://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz/download -O mcrypt-2.6.8.tar.gz
tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8

# 指定 libmcrypt 路徑與 php-config
/usr/local/php5/bin/phpize
./configure \
    --with-php-config=/usr/local/php5/bin/php-config \
    --with-mcrypt=/usr/local/libmcrypt \
    --with-libmcrypt-prefix=/usr/local/libmcrypt
make && make install

4. 啟用 PHP mcrypt 擴展

編譯成功後,提示類似:

Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/

修改 php.ini:

extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/"
extension = mcrypt.so

重啟 Apache/PHP-FPM:

service httpd restart
# 或
/usr/local/php5/sbin/php-fpm restart

5. 驗證安裝

/usr/local/php5/bin/php -m | grep mcrypt
# 輸出: mcrypt

/usr/local/php5/bin/php -i | grep "mcrypt support"
# mcrypt support => enabled
# mcrypt_filter support => enabled
# Version => 2.5.8
# Api No => 20021217

常見錯誤與解決

錯誤原因解決
configure: error: mcrypt.h not foundlibmcrypt 未安裝或路徑錯誤安裝 libmcrypt,指定 --with-libmcrypt-prefix
phpize: command not found未安裝 php-devel / php5-devyum install php-devel / apt install php5-dev
mcrypt.so: undefined symbol庫版本不匹配 / 多版本衝突檢查 ldd mcrypt.so,確保鏈接正確 libmcrypt
編譯通過但 php -m 無 mcryptextension_dir 錯誤 / 未重啟服務核對 php.ini extension_dir,重啟 PHP

現代替代方案(強烈建議遷移)

<?php
// 1. OpenSSL AES-256-CBC (PHP 5.3+ 內置)
function encryptOpenSSL($data, $key, $iv) {
    return openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
}
function decryptOpenSSL($data, $key, $iv) {
    return openssl_decrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
}

// 2. Sodium (PHP 7.2+ 內置,更安全、更簡單)
function encryptSodium($data, $key) {
    $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    $cipher = sodium_crypto_secretbox($data, $nonce, $key);
    return $nonce . $cipher; // 存儲時拼接 nonce
}
function decryptSodium($data, $key) {
    $nonce = substr($data, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    $cipher = substr($data, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    return sodium_crypto_secretbox_open($cipher, $nonce, $key);
}
?>

總結

本文記錄了 CentOS 6.3 下 PHP 5.3 手動編譯安裝 mcrypt 的完整步驟與坑點。對於現存老項目可參考操作;新項目務必使用 OpenSSL 或 Sodium,獲得原生支持、更好性能、無依賴地獄、長期安全維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved