【问题标题】:Unable to load dynamic library 'php_libsodium'无法加载动态库“php_libsodium”
【发布时间】:2017-07-29 16:05:42
【问题描述】:

我正在尝试安装 libsodium php 扩展 (https://pecl.php.net/package/libsodium/1.0.6/windows)。

当我运行php -m 时,libsodium 出现在列表中。 但是,当我去 phpinfo 时,它没有列出。

我还注意到 apache 给了我错误:PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\xampp\\php\\ext\\php_libsodium.dll' - The specified module could not be found.\r\n in Unknown on line 0

我已经检查了多次,该文件确实存在并且匹配正确的架构和线程安全,所以我不知道还有什么可能导致这种情况。

任何帮助将不胜感激。

【问题讨论】:

  • 看起来您在 CLI PHP 的 php.ini 中激活了 libsodium,但在 Apache Web 服务器使用的 php.ini 中没有激活。
  • @LBA 在 phpinfo 下它说 Configuration File (php.ini) Path C:\WINDOWS Loaded Configuration File C:\xampp\php\php.ini 但是当我进入 windows 目录时它没有 php.ini 文件,所以我假设它正在加载那里列出的 hte xampp 目录中的那个,这是我一直在编辑以加载扩展程序的那个。

标签: php apache xampp php-extension libsodium


【解决方案1】:

尝试将 xampp\php\libsodium.dll 复制到 xampp\apache\bin\libsodium.dll 并重新启动 apache。 关于 XAMPP 8.0.5 我的帮助。

【讨论】:

    【解决方案2】:

    尝试安装 libsodium:

    验证 php 和 pecl php -v pecl版本

    如果你有 php7.X 那么: sudo pecl install -f libsodium

    如果您在 Docker 容器中: pecl install -f libsodium

    在 php.ini 中添加 sodium.so 扩展。

    sudo echo "extension = sodium.so" > /etc/php/7.1/mods-available/sodium.ini sudo phpenmod 钠

    验证是否安装了扩展程序 php -i | grep“钠”

    【讨论】:

      【解决方案3】:

      根据我的经验,您可能会因为几个不同的原因收到“无法加载动态库”消息:

      1. 您在 php.ini 中启用了一个模块,但 PHP 找不到该 dll 文件(或者它不存在,或者它位于错误的目录中)。
      2. 为错误的架构(32 位与 64 位)或错误的线程模型(例如,在非线程安全版本的 PHP 上使用线程安全 DLL)编译 dll 文件。
      3. dll 有一些无法找到的依赖项。例如,您可能需要将一些额外的 .dll 文件放在 PHP 可以找到它们的位置(例如,在 PHP 主目录中)。

      在您的情况下,鉴于您指出 PHP 使用 php -mphinfo() 报告的内容之间存在差异(可能在网页中),#1 可能是原因。在 php.ini 中的 extension_dir 设置指定的位置查找扩展。如果这是一个相对路径,那么它在 Web 服务器上下文中的解析可能与从命令行运行时不同。

      【讨论】:

      • 我检查了我的 extension_dir 以确保它是正确的,它在 php.ini 文件和通过 phpinfo() 中都列为“C:\xampp\php\ext”。我确保遵循为 libsodium 列出的说明,并将 lib_libsodium.dll 放在该目录中。我还将 libsodium.dll 和 php.exe 放在“C:\xampp\php”中。
      • php -i 显示为扩展目录是什么?它与命令行不同吗?此外,<?php echo getcwd(); ?> 在每种情况下(web 与 cli)显示什么?
      • php -i 表示extension_dir => C:\xampp\php\ext => C:\xampp\php\ext,这与 web 和 cli 上列出的内容相同。对于 getcwd,cli 给了我C:\xampp,但 web 给了我我的桌面:C:\Users\myusername\Desktop\
      • 啊哈!我想知道这是否是问题所在。如果你把 lib_libsodium.dll 放在你的桌面上,它可以工作吗?
      • 另外,值得检查的另一件事是 <?php echo getenv("PATH"); ?> 给你的 - 这里有什么不同吗?
      猜你喜欢
      • 2012-01-26
      • 2019-04-03
      • 2016-08-25
      • 2017-03-03
      • 2019-01-03
      • 2019-07-30
      • 2018-07-30
      • 2019-03-19
      • 2019-03-22
      相关资源
      最近更新 更多