【问题标题】:Unable to load dynamic library 'php_openssl.dll' when running phpunit on WSL在 WSL 上运行 phpunit 时无法加载动态库“php_openssl.dll”
【发布时间】:2019-12-11 09:46:11
【问题描述】:

当我尝试在 WSL(Linux 的 Windows 子系统)上运行我的 PHPUnit 测试时。我总是会收到这个警告:

PHP Warning: PHP Startup: Unable to load dynamic library 'php_openssl.dll' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20190902/php_openssl.dll (/usr/local/lib/php/extensions/no-debug-non-zts-20190902/php_openssl.dll: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20190902/php_openssl.dll.so (/usr/local/lib/php/extensions/no-debug-non-zts-20190902/php_openssl.dll.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

我已经搜索了我所有的 .ini 文件,以查找是否有任何 extension=php_openssl.dll 在它们之前没有 ;。但是没有找到。

如果有人可以帮助我,我将非常感激!

【问题讨论】:

    标签: php windows-subsystem-for-linux


    【解决方案1】:

    WSL 是“Linux 的 Windows 子系统”。这意味着它确实是一个 Linux 环境,在容器/VM/类似的东西中运行在您的 Windows 内核之上。

    而且,在 Linux 环境中,DLL 文件(“动态链接库”)没有用处。 Linux 等价物是 .so 文件(“共享对象”)。

    您在警告文本中看到配置指定加载 php_openssl.dll,但 PHP 运行时尝试打开 php_openssl.dll.so -- 它不存在。

    因此,要让该配置在 Windows 和 Linux 上运行,您需要从配置中删除文件扩展名 - PHP 将尝试附加 .dll 或 .so,具体取决于它运行的环境. 只需在您的配置文件中尝试extension=php_openssl

    【讨论】:

    • 当然可以。但是当我将其更改为 extension=openssl 并重新运行我的测试时,它仍然给我同样的错误:PHP Warning: PHP Startup: Unable to load dynamic library 'php_openssl.dll' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20190902/php_openssl.dll (/usr/local/lib/php/extensions/no-debug-non-zts-20190902/php_openssl.dll: cannot open shared object file: No such file or directory)
    • @TobyR 这几乎听起来好像 Windows 的 PHP 二进制文件正在 linux 环境中运行。该目录中是否有任何openssl dll或其他浮动?您的 extension_dir 设置是否正确?检查这个相关问题的答案,也许他们会给你一些关于看什么的提示:stackoverflow.com/questions/5282264/…
    • 谢谢,但不幸的是,没有openssl.dll 文件漂浮,我认为扩展名是正确的。我已经使用 Chocolatey 安装了 php,因为它简化了我的很多问题。 openssl 的 cnf 文件位于子文件夹 \extras\ssl 中,而 openssl.dll 位于 \ext 文件夹中(在我的主机上)。但我不确定 WSL 上的扩展在哪里?
    • @TobyR 好吧,chocolatey 是一个windows 的包管理器。在 WSL 中,还有另一个您在 WSL 中安装的 Linux 发行版的包管理器。 Ubuntu,也许?然后,如果您决定在 WSL 中运行 PHP,则需要使用 apt 从 WSL 容器内的 bash 提示符 安装 PHP 的 linux 二进制文件。这看起来像是从 Linux 环境 启动 windows PHP。在没有 WSL 的情况下运行 windows PHP 或从 WSL 内部运行 linux PHP。
    • 嗯,因为我用的是巧克力,也许它的路径变量有误。我要检查一下。感谢您的所有帮助!
    猜你喜欢
    • 2013-09-06
    • 2016-03-26
    • 1970-01-01
    • 2021-07-02
    • 2016-12-07
    • 2018-12-11
    • 2015-08-09
    • 2019-02-09
    • 1970-01-01
    相关资源
    最近更新 更多