php未加载openssl扩展,主因是模块文件缺失或路径错误:windows下php_openssl.dll及依赖dll未放对位置,linux下未编译出openssl.so或extension_dir路径错误;需用php --ini确认实际加载的php.ini,并验证模块名与路径匹配。

php -m 里没 openssl,但 php.ini 已启用 extension=php_openssl.dll?
这说明扩展文件根本没被 PHP 加载——不是配置问题,是模块本身缺失或路径错误。Windows 下常见于 php_openssl.dll 文件不在 ext/ 目录,或依赖的 libeay32.dll、ssleay32.dll 没放对位置(比如没复制到 System32 或 PHP 根目录)。Linux 下则更可能是源码未编译出 openssl.so,或者 extension_dir 指向了空目录。
Linux 编译 openssl 扩展时提示 Cannot find config.m4
这是典型源码不完整导致的。PHP 源码包里的 ext/openssl/ 目录下默认只有 config0.m4,没有 config.m4 ——而 phpize 只认后者。必须手动重命名:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
mv config0.m4 config.m4- 再运行
/path/to/phpize(务必用当前 PHP 对应的phpize,别用系统 PATH 里混杂的版本) -
./configure --with-openssl --with-php-config=/path/to/php-config中的--with-openssl是关键:它告诉编译器去链接系统 OpenSSL 库(如/usr/lib64/libssl.so),而不是走内置逻辑
make install 后 php -m 仍不显示 openssl
有三个高概率原因:
-
php.ini里写的extension=openssl或extension=php_openssl.dll跟实际生成的文件名不一致(Linux 是openssl.so,Windows 是php_openssl.dll) -
extension_dir配置指向了错误路径,比如写成/usr/lib/php/extensions/,但实际make install把openssl.so放到了/usr/local/lib/php/extensions/no-debug-non-zts-20220829/ - PHP CLI 和 Web SAPI(如 Apache 的 mod_php)用了不同的
php.ini,你改的是 Web 版的,但php -m查的是 CLI 版 —— 用php --ini确认加载的是哪个 ini 文件
即使 openssl 加载成功,composer install 仍报 certificate verify failed
这不是扩展没开,而是 OpenSSL 不信任 CA 证书。PHP 默认不自带可信根证书,需要显式指定:
- 下载官方 CA 包:
curl -o /etc/ssl/certs/cacert.pem https://curl.se/ca/cacert.pem - 在
php.ini中添加:openssl.cafile="/etc/ssl/certs/cacert.pem" - 注意路径必须是绝对路径,且 PHP 进程要有读取权限;Windows 下路径用正斜杠或双反斜杠,例如
C:/php/cacert.pem - 如果用的是自建 CA 或内网镜像,还得额外配
openssl.capath或更新系统级证书库
phpize 编译的 openssl.so 依赖系统 OpenSSL 版本,若服务器 OpenSSL 太旧(如 CentOS 7 自带 1.0.2),而 PHP 编译时又没加 --with-openssl-dir 指向新版本,就可能在 TLS 1.3 握手或某些 cipher suite 上静默失败。










