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


94

我运行PHP脚本并收到此错误:

PHP警告: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中没有这样的文件或目录

那是什么意思?

Answers:


55

这意味着您的一个php配置文件(php.ini或接近它的另一个)中有一个extension=...zend_extension=...行试图加载该扩展名:ixed.5.2.lin

不幸的是,该文件或路径不存在或权限不正确。

  1. 尝试搜索.iniPHP加载的文件(phpinfo()可以指出是哪个文件)-其中之一应尝试加载该扩展名。
  2. 请更正文件的路径或注释掉相应的行。

6
所以我也遇到了这个错误,但是我的网站仍然可以正常工作-那是最奇怪的部分。对于这种类型的错误,我认为php将从一开始就崩溃。相反,我得到了我的页面,但是我的记录器正在记录此错误。奇怪吗?
英国电信

1
在php.ini中(以我的情况为/etc/php.ini),我注释掉了extension = php_pdo_mysql.dll行并重新启动了Apache,这解决了我的问题并摆脱了警告。(Mac,Maverick)
奥拉2014年

要么纠正路径,我们在谈论什么路径?
prats1411 '16

3.或安装缺少的预期扩展名
安德鲁(Andrew)

ini文件中的@ prats1411:extension = [此处的路径]
Andrew

37

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

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

更新:如评论中所述,这可能更加准确:

php -i | grep ini

5
php -i | grep ini应该也可以正常工作(当您有命令参数时,无需打印phpinfo)
YorickH 2015年

1
我有类似的错误,phpinfo()但未列出任何有问题的ini文件。php -i | grep ini按照YorickH的建议为我工作。这将列出为CLI加载的库,事实证明导致警告的ini文件在我的情况下位于CLI目录下。
DaneeL,2015年

7
如何php --ini列出所有ini文件
OzzyCzech '16

17

如果您只是想使错误消失,并且不需要扩展名,请务必在中注释掉该行php.ini。但是,如果您实际上要解决此问题,则这里有一些其他信息。

基于确切的模块,有多种原因,但也有一些通用准则。

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

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

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

在* nix(PEAR)上
安装在Windows上安装扩展


我想通过这个梨模块来安装,但是当我跑perl install <module>Can't open perl script "install": File or Directory not found
Fabiotk

很难知道问题所在,检查您的路径和权限。
EternalHour 2016年

如果在容器中尝试docker-php-ext-install <package>
jiggunjer,

13

XAMPP的phpStom

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"

2
这个固定为我在Windows 10
贾斯汀Eldracher

1
这已在Windows 7上为我修复。非常感谢
Paramjeet19年

6

php -r "echo php_ini_loaded_file();"

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


4

在Linux中加载.dll

我在尝试通过php.ini文件安装php扩展名时遇到了此警告消息;

直到我发现您无法在Linux中加载.dll扩展名之前,

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

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


确实,对我而言,这只是缺少模块安装-我正在安装phpPgAdmin,我需要明确安装的是sudo apt install php-pgsqlphp-version-specific sudo apt install php7.1-pgsql(将7.1更改为您的php版本)
jave.web

3

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

例如,在Ubuntu 14.04上,我将PHP5自动安装到path中/usr/lib/php5/20121212+lfs。但是,由于我在C ++中构建一些共享库,因此我弄乱了目录权限,搞砸了事情,使非root帐户没有查看目录的执行(打开目录)权限/usr/lib/php5/20121212+lfs。因此,我键入了以下命令来纠正该问题:

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

现在,当我php -l example.php以非root用户身份登录时,再也不会出现“无法加载动态库”的问题。


这是使用Ubuntu 16.10的确切解决方案。确保在使用Linux时将扩展名“ extension”更改为.so(标准配置为我提供了.dll)
mroesler 2016年

我正在使用Linux Mint 18,这仍然有效
Dika

2

当我尝试安装作曲家时,在Windows的XAMPP上遇到了相同的问题。我做了php -v和php投掷错误:

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

我花了一段时间才意识到我需要设置XAMPP。因此,我运行setup_xampp.bat并且php返回后就像一个魅力。


2

当我尝试安装作曲家时,在Windows 10的XAMPP上遇到相同的问题。

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

然后按照以下步骤

  1. 只需在texteditor中打开您的current_xampp_ contains_drive:\ xampp(default_xampp_folder)\ p​​hp \ php.ini(例如notepad ++)
  2. 现在只是找到-current_xampp_ contains_drive:\ xampp是否存在?
  3. 如果没有,则找到“ extension_dir”并获得驱动器名称(c,d或所需的驱动器)。

extension_dir =“ F:\ xampp731 \ php \ ext”(此处finded_drive_name_from_the_file为F)

  1. 再次用current_xampp_ contains_drive:\ xampp替换为finded_drive_name_from_the_file:\ xampp并保存。
  2. 现在再次开始作曲家的安装进度,我想您的问题将得到解决。

1

当我在服务器上并排运行不同版本的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

1

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

我感到困惑和激活mysqli.dll(和mysql.dll:在/etc/php/7.2/cli/php.ini

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

像XAMPP长相读取php.ini从文件/etc/php/7.2/cli,并使得修改php.ini/opt/lampp/etc。(;“;”之后的extension = php_pdo_mysql.dll重新启动了Apache,没有任何消息。


1

就我而言,出现此错误是因为我下载了dll的线程安全版本(以标记-ts-),但是我的php安装的php是非线程安全的(以标记-nts-)。下载正确版本的dll,该版本与我的php安装版本完全匹配,从而解决了该问题。


1
要检查服务器线程安全配置,请参阅phpinfo()和thread-safety启用/禁用。相反,在为ts配置时下载nts时出现了同样的错误。
安迪


0

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



0

我所做的是

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

<?php   
    phpinfo();
?>

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

方法phpinfo()结果

3-打开该文件

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

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

在此处输入图片说明


0

'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)–为此使用依赖项遍历程序都是调试版本或都是发行版本都启用了ZTS或禁用了ZTS对于依赖的库进一步的库(DLL),请确保它们可用(例如,与扩展名位于同一目录中),如果上述前三个条件中的任何一个都不满足,PHP应该给您带来含义错误,但是我还是写了这些,因为我不确定适用于PHP 5.2。


-1

我有一个类似的问题,以下是所有警告/错误中的一些。

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

如果检查警告,您将看到它正在寻找php扩展名,C:\php\ext\因此我将php下载到该C:\目录中,从而解决了问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.