最直接的方式是运行 phpinfo() 查看 OpenSSL 模块是否启用;其次用 extension_loaded('openssl') 快速检测;最后通过 openssl_encrypt() 测试实际加解密能力,三步缺一不可。

检查 phpinfo() 中 OpenSSL 是否启用
最直接的方式是运行 phpinfo(),看 OpenSSL 模块是否被加载且状态为 enabled。新建一个 info.php 文件,内容为:
用 extension_loaded('openssl') 快速判断
在命令行或脚本中执行以下代码,比翻 phpinfo() 更快:
注意:extension_loaded() 只检测扩展是否载入,不保证底层库可用;如果返回 true 但后续调用失败,可能是 OpenSSL 库路径缺失或版本冲突。
测试实际加密能力:调用 openssl_encrypt()
光加载扩展不够,得验证能否真正加解密。下面这段代码会触发真实 OpenSSL 调用:
立即学习“PHP免费学习笔记(深入)”;
getMessage() . "\n"; } ?>
常见失败原因包括:openssl_encrypt() 报 “Unknown cipher”(PHP 版本太低或 OpenSSL 库不支持 AES-256-CBC)、OPENSSL_RAW_DATA 常量未定义(PHP $iv 长度不对(AES-CBC 要求 16 字节)。
命令行下验证 PHP 和系统 OpenSSL 的联动
终端执行:
php -r "print_r(openssl_get_cipher_methods());",若报错
Fatal error: Call to undefined function openssl_get_cipher_methods(),说明扩展没启用;若返回空数组,可能是 OpenSSL 库被禁用(如某些 Alpine 镜像默认不带完整 crypto 支持);若返回大量算法名(如 aes-128-cbc、rsa),基本可确认可用。
再执行:
php -m | grep openssl,确认模块出现在已启用列表里。如果这里没输出,就别往下测了——得先去
php.ini 开 extension=openssl(Windows 下是 php_openssl.dll,Linux/macOS 下通常是 openssl.so),并确保 libssl 和 libcrypto 在系统库路径中。
最容易被忽略的是:PHP 编译时用了 --without-openssl,或者容器镜像(如 php:alpine)没装 openssl 系统包,此时即使开了 extension,也会静默失效。











