PHP 警告:PHP 启动:无法加载动态库

Posted

技术标签:

【中文标题】PHP 警告:PHP 启动:无法加载动态库【英文标题】:PHP Warning: PHP Startup: Unable to load dynamic library 【发布时间】:2021-08-27 00:15:45 【问题描述】:

我运行一个 php 脚本并得到这个错误:

'/usr/local/lib/php/extensions/no-debug-non-zts-20090626/ixed.5.2.lin' - /usr/local/lib/ php/extensions/no-debug-non-zts-20090626/ixed.5.2.lin:无法打开共享对象文件:第 0 行的 Unknown 中没有此类文件或目录

这是什么意思?

【问题讨论】:

【参考方案1】:

这意味着您的一个 php 配置文件 (php.ini 或其他接近它的文件)中有一个 extension=...zend_extension=... 行正在尝试加载该扩展名:@ 987654323@

很遗憾,该文件或路径不存在或权限不正确。

    尝试在 PHP 加载的 .ini 文件中进行搜索(phpinfo() 可以指出是哪些文件)- 其中一个应该尝试加载该扩展。 要么更正文件的路径,要么注释掉相应的行。

【讨论】:

所以我也遇到了这个错误,但我的网站仍然有效——这是最奇怪的部分。对于这种类型的错误,我假设 php 从一开始就会崩溃。相反,我得到了我的页面,但我的记录器正在记录这个错误。很奇怪吧? 在 php.ini (在我的例子中是 /etc/php.ini)我注释掉了 extension=php_pdo_mysql.dll 行并重新启动了 Apache,它解决了我的问题并得到了摆脱警告。 (麦克,特立独行) 要么纠正路径我们在说什么路径? 3.或安装缺少的预期扩展 @prats1411 在 ini 文件中:extension= [path here]【参考方案2】:

如果您使用的是 Linux,您可以通过在 shell 中键入以下内容来找到所有已加载的配置文件:

php -r "print phpinfo();" | grep ".ini"

更新: 正如 cmets 中提到的,这可能更准确:

php -i | grep ini

【讨论】:

php --ini 列出所有 ini 文件怎么样【参考方案3】:

如果您只是想让错误消失,并且不需要扩展,那么请务必将 php.ini 中的行注释掉。但如果你真的想解决这个问题,这里有一些额外的信息。

根据具体的模块,造成这种情况的原因有多种,但也有一些一般准则。

    打开phpinfo() 并在Core 部分下查找extension_dir。这是您的模块所在的位置。

例如,/usr/lib/php/modules 用于 Unix/Linux。

    如果文件确实存在,请确保权限足够。 如果该文件不存在,请使用以下资源进行安装。

Installation on *nix (PEAR)Installation of extensions on Windows

【讨论】:

我正在尝试通过这个 pear 模块进行安装,但是当我运行 perl install <module> 时,我得到了 Can't open perl script "install": File or Directory not found 很难知道问题所在,检查你的路径和权限。 如果在容器中尝试docker-php-ext-install <package> 这帮助我在 php.ini 中查找它,然后看到该文件夹​​是空的。【参考方案4】:

phpStom 与 XAMPP

TL;DR 除了验证文件是否存在,您可能需要将驱动器号添加到 php.ini 文件中的某些记录中

我突然开始在使用 phpStorm 7 使用 xampp 和 xdebug 调试 php 时遇到问题。当试图将 intellij interperter 设置为 xampps php 时,我收到了很多类似问题中的警告,例如:

无法加载动态库'/xampp/php/ext/php_bz2.dll'

由于某种原因,我不得不将驱动器号添加到 php.ini 文件中的 extension_dir 和 browscap 的记录中:

extension_dir = "\xampp\php\ext"
browscap = "\xampp\php\extras\browscap.ini"

extension_dir = "e:\xampp\php\ext"
browscap = "e:\xampp\php\extras\browscap.ini"

【讨论】:

这在 Windows 10 上为我修复了它。 这在 Windows 7 上为我修复了它。非常感谢 从 cmd 运行时使用 extension_dir = "ext" 有效,但从 Apache 运行时可能需要绝对路径(带有驱动器号等)。【参考方案5】:

当我尝试安装 composer 时,我在 XAMPP for Windows 上遇到了同样的问题。 我做了php -v 和 php 抛出错误:

无法加载动态库'/xampp/php/ext/php_bz2.dll'

我花了一段时间才意识到我需要设置我的 XAMPP。所以我运行setup_xampp.bat 并且 php 像魅力一样返回工作。

【讨论】:

【参考方案6】:

请注意,如果您的 PHP 库没有“其他”目录打开权限,您也可能会收到此错误。在我的特殊情况下,我在使用php -l 对文本编辑器中的脚本进行语法检查时注意到了这一点。这意味着,由于我的帐户名为“voloike”,因此该帐户无权运行 php 命令所依赖的库。

例如,在 Ubuntu 14.04 上,我将 PHP5 自动安装到路径 /usr/lib/php5/20121212+lfs 中。但是,因为我在 C++ 中构建一些共享对象,所以我弄乱了目录权限并将事情搞砸了,以至于非 root 帐户没有目录执行(目录打开)权限来查看 /usr/lib/php5/20121212+lfs。所以,我输入了以下命令来纠正这个问题:

sudo chmod o+x /usr/lib/php5/20121212+lfs.

现在,当我以非 root 用户身份执行 php -l example.php 时,它再也不会给我这个“无法加载动态库”的问题了。

【讨论】:

这是我使用 Ubuntu 16.10 的确切解决方案。确保在使用 Linux 时将扩展名“extension”更改为 .so(标准配置给了我 .dll) 我使用的是 linux mint 18,这仍然有效【参考方案7】:

我遇到了类似的错误。我犯的错误是在我的网址中使用“控制器”名称作为“页面”而不是“页面”。

【讨论】:

【参考方案8】:

php -r "echo php_ini_loaded_file();"

将在 CLI 中显示当前的 ini 加载文件,在那里搜索您的扩展名,它的路径不正确。

【讨论】:

【参考方案9】:

在 Linux 中加载 .dll

我在尝试通过 php.iniphp-extension 时遇到此警告消息/strong> 文件;

直到我发现你无法在 Linux 中加载 .dll 扩展,

但您必须评论您要导入的扩展 ;extension= ... .dll 并通过sudo apt-get install php-...正确安装

注意... 是您要启用的扩展名。

【讨论】:

没错,对我来说,它只是缺少模块安装 - 我正在安装 phpPgAdmin,我需要明确安装的是 sudo apt install php-pgsql 和 php-version-specific sudo apt install php7.1-pgsql(将 7.1 更改为您的 php 版本)【参考方案10】:

当我在我的服务器上并排运行不同版本的 PHP 时,我在多个模块上都遇到了这个错误。为了解决这个问题,我需要安装它找不到的特定 PHP 版本的包。所以,例如,如果我看到:-

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/xml.so'

我会专门为 PHP 版本安装库:-

sudo apt-get install php7.1-xml

然后重新启动 Apache。为我修好了。您可以像这样检查您的版本:-

php -v

【讨论】:

【参考方案11】:

Windows 10 XAMPP 之后,现在我在 Ubuntu 上安装了 LAMPP (XAMPP)。与 MAC (ios) 相比,Windows XAMPP 的配置要少得多,但现在有了 Linux Ubuntu,我有了更多配置,因为 Linux 中有更多配置(一件好事)。

我混淆并激活了mysqli.dll(和mysql.dll:删除/etc/php/7.2/cli/php.ini中的“#”

我开始收到与dll 相关的PHP Warning: PHP Startup: Unable to load dynamic library 消息。我在同一个文件中注释掉了mysql(and i).dll,但直到我注释掉/opt/lampp/etc/php.ini 中的“”,该消息才消失。

看起来 XAMPP 从/etc/php/7.2/cli 读取php.ini 文件并在/opt/lampp/etcphp.ini 中进行修改。 (;extension=php_pdo_mysql.dll after ";" 重启 Apache 后没有任何消息。

【讨论】:

【参考方案12】:

在 Windows 中,它可能是“系统环境变量”中的错误路径。 php.exe 目录的“路径”必须是好的。

【讨论】:

【参考方案13】:

当我尝试安装 composer 时,我在 XAMPP for Windows10 上遇到了同样的问题。

无法加载动态库'/xampp/php/ext/php_bz2.dll'

然后按照以下步骤操作

    只需在 texteditor 中打开你的 current_xampp_containing_drive:\xampp(default_xampp_folder)\php\php.ini (如记事本++) 现在只需查找 - current_xampp_ contains_drive:\xampp 是否存在? 如果没有,则找到“extension_dir”并获取驱动器名称(c、d 或您想要的驱动器)之类的。

extension_dir="F:\xampp731\php\ext"(这里find_drive_name_from_the_file是F)

    再次将 find_drive_name_from_the_file:\xampp 替换为 current_xampp_ contains_drive:\xampp 并保存。 现在再次启动composer安装进度,我想你的问题会解决的。

【讨论】:

【参考方案14】:

我遇到了类似的问题,下面是所有警告/错误中的一些。

Warning: PHP Startup: Unable to load dynamic library 'curl' (tried: C:\php\ext\curl 
(The specified module could not be found.), C:\php\ext\php_curl.dll (The specified 
module 
could not be found.)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'fileinfo' (tried: 
C:\php\ext\fileinfo (The specified module could not be found.), 
C:\php\ext\php_fileinfo.dll (The specified module could not be found.)) in Unknown on 
line 0

如果您检查警告,您会看到它正在C:\php\ext\ 中寻找php 扩展,所以我将php 下载到C:\ 目录并解决了问题。

【讨论】:

【参考方案15】:

我所做的是;

1 - 我首先通过函数 phpinfo() 找出我正在使用的 PHP 版本

<?php   
    phpinfo();
?>

2 - 从那里你会找到你的配置(php.ini)文件的位置

3 - 打开该文件

4 - 注释掉类似于下图的行

这可能是一个不同的值,但它应该与扩展有关。 我不是专家,但这个过程帮助我解决了类似的问题。

【讨论】:

【参考方案16】:

'C:/PHP/5.2.13/ext\php_mcrypt1.dll'

我会说你的 php.ini 上有一些错字(额外的 1)。也许您正在加载与预期不同的 php.ini(请参阅 php.ini 的输出以确保)。

除此之外,请确保 php_mcrypt.dll 和 PHP:

链接到同一个 VC 运行时库(通常是 VC6 的 msvcrt.dll 或 VC9 的 msvcrt90.dll)——例如使用这个的依赖walker 都是调试版本还是发布版本 两者都启用了 ZTS 或禁用了 ZTS 对于依赖于其他库 (DLL) 的库,请确保它们可用(例如,在与扩展相同的目录中) 如果不满足上述前三个条件中的任何一个,PHP 应该会给出有意义的错误,但我还是写了这些,因为我不确定 PHP 5.2。

【讨论】:

【参考方案17】:

在我的情况下,我收到此错误是因为我下载了 dll 的线程安全版本(以-ts- 为前缀),但我的 php 安装是非线程安全的(以-nts- 为前缀)。下载正确版本的 dll,完全匹配我的 php 安装版本解决了这个问题。

【讨论】:

要检查服务器线程安全配置,请参阅 phpinfo() 和 thread-safety 启用/禁用。反向有同样的错误,为ts配置时下载了nts。【参考方案18】:

就我而言,当我将 php 版本更新到 7.4 时,此消息开始出现。

为了解决这个问题,我必须在 php 版本文件夹 (/etc/php/7.4/apache2/ && /etc/php/7.4/cli/) 中查找 php.ini 文件,检查扩展名所在的行可以看到扩展 gd2 和 intl 没有注释。

【讨论】:

【参考方案19】:

从 C:\xampp\php\php.exe 我得到了

无法加载动态库“” C:\xampp\php\ext\php_.dll(找不到指定的模块。)

我通过注释解决了 C:\xampp\php\php.ini;extension=

【讨论】:

【参考方案20】:

当我尝试将 php 与 sql server 一起使用时,我遇到了同样的问题,当我添加了 sqlsrv 库时......它给了我错误,经过几天的研究,我了解到微软在这方面不支持 x64案例所以我所做的是安装 laragon x86 并使用相应的库。我希望它对某些事情有所帮助

【讨论】:

以上是关于PHP 警告:PHP 启动:无法加载动态库的主要内容,如果未能解决你的问题,请参考以下文章

Composer 安装“PHP 警告:PHP 启动:无法加载动态库 'gd2'”

PHP 警告:PHP 启动:无法加载动态库

PHP 警告:PHP 启动:无法加载动态库

PHP 警告:PHP 启动:无法加载动态库 '/usr/lib/php/20151012/mysql.so'

PHP 警告:PHP 启动:无法加载动态库 imagic.so

PHP 警告:PHP 启动:无法加载动态库 '\xampp\php\ext\php_mailparse.dll' - 找不到指定的模块