![PHP 启动:无法加载动态库“/usr/lib/php/20151012/php_openssl.dll”](https://linux22.com/image/1087782/PHP%20%E5%90%AF%E5%8A%A8%EF%BC%9A%E6%97%A0%E6%B3%95%E5%8A%A0%E8%BD%BD%E5%8A%A8%E6%80%81%E5%BA%93%E2%80%9C%2Fusr%2Flib%2Fphp%2F20151012%2Fphp_openssl.dll%E2%80%9D.png)
我有 ubuntu 14.04、php 7 和 nginx。
我想使用 mysql ssl,因此我已通过删除 extension=php_openssl.dll 前面的“;”来启用它
/etc/php/7.0/fpm/php.ini
/etc/php/7.0/cli/php.ini
重新启动了 php 和 nginx 服务。现在我收到错误:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/php_openssl.dll' - /usr/lib/php/20151012/php_openssl.dll: cannot open shared object file: No such file or directory in Unknown on line 0
文件“/usr/lib/php/20151012/php_openssl.dll”确实不存在。
我尝试使用 mysql ssl 连接的 Php 脚本:
$con=mysqli_init();
if (!$con){
die("mysqli_init failed");
}
mysqli_ssl_set($con, "/var/www/certs/client-key.pem","/var/www/certs/client-cert.pem","/var/www/certs/ca-cert.pem",NULL, null);
if (!mysqli_real_connect(
$con,"localhost","user", 'password',"db", 3306)){
die("Connect Error: " . mysqli_connect_error());
}
mysqli_close($con);
所有证书文件的权限均正常,已尝试 644、664、777。
尝试通过浏览器和控制台执行脚本。
我可以在哪里找到丢失的包裹?
谢谢
更新 1: 如果我在 php.ini 文件中注释掉“extension=php_openssl.dll”,那么我会收到另一个错误:
PHP Warning: mysqli_real_connect(): this stream does not support SSL/crypto in /var/www/tmp.php on line 70
答案1
动态链接库 (DLL) 是 Windows 特有的技术,无法在 Ubuntu 上运行。由于 PHP 可以在不同的操作系统上运行,因此其配置文件包含如何在不同操作系统上配置它的示例:
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
; If you wish to have an extension loaded automatically, use the following
; syntax:
;
; extension=modulename.extension
;
; For example, on Windows:
;
; extension=msql.dll
;
; ... or under UNIX:
;
; extension=msql.so
;
; ... or with a path:
;
; extension=/path/to/extension/msql.so
通常,Linux 版本的 PHP 已经内置了 SSL 支持,而 Windows 版本则需要您提到的 DLL。但您似乎使用了第三方版本的 PHP 7(可能是来自 PPA?),因为 Ubuntu 14.04 默认附带 PHP 5。因此,这个第三方版本可能会以不同的方式处理 SSL。
答案2
如果您使用 mysql ssl,请不要使用 localhost,请使用服务器 IP 地址作为数据库主机。