PHP5中的错误..无法加载动态库

时间:2012-05-12 16:35:09

标签: php

root@ip-10-131-9-200:/etc/php5/apache2# php -a
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/curl.so' - /usr/lib/php5/20090626+lfs/curl.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/mcrypt.so' - /usr/lib/php5/20090626+lfs/mcrypt.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/mysql.so' - /usr/lib/php5/20090626+lfs/mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/mysqli.so' - /usr/lib/php5/20090626+lfs/mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/pdo.so' - /usr/lib/php5/20090626+lfs/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/pdo_mysql.so' - /usr/lib/php5/20090626+lfs/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
Interactive shell

14 个答案:

答案 0 :(得分:139)

尽管有其他几个答案表明,安装更多不必要的软件通常是最佳解决方案。相反,你应该解决潜在的问题。这些消息出现的原因是您尝试加载这些扩展,但它们未安装。所以简单的解决方案就是告诉PHP停止尝试加载它们:

首先,找出哪些文件正在尝试加载上述扩展程序:

$ grep -Hrv ";" /etc/php5 | grep -E "extension(\s+)?="

Ubuntu的输出示例:

/etc/php5/mods-available/gd.ini:extension=gd.so
/etc/php5/mods-available/pdo_sqlite.ini:extension=pdo_sqlite.so
/etc/php5/mods-available/pdo.ini:extension=pdo.so
/etc/php5/mods-available/pdo_mysql.ini:extension=pdo_mysql.so
/etc/php5/mods-available/mysqli.ini:extension=mysqli.so
/etc/php5/mods-available/mysql.ini:extension=mysql.so
/etc/php5/mods-available/curl.ini:extension=curl.so
/etc/php5/mods-available/sqlite3.ini:extension=sqlite3.so
/etc/php5/conf.d/mcrypt.ini:extension=mcrypt.so
/etc/php5/conf.d/imagick.ini:extension=imagick.so
/etc/php5/apache2/php.ini:extension=http.so

现在只需查找正在加载导致错误的扩展名的文件,并将这些行注释掉;。由于某些原因,我发现Ubuntu的默认安装,所以希望这有助于其他人。

答案 1 :(得分:47)

sudo apt-get install php5-mcrypt
sudo apt-get install php5-mysql

...等为我解决了它:)

希望有所帮助

答案 2 :(得分:13)

查看/etc/php5/cli/conf.d/并删除相应的* .ini文件。当你删除一些不太干净的php包时会发生这个错误。

答案 3 :(得分:11)

好像你升级了PHP 到更新的版本,旧的.ini文件仍指向旧位置。

解决方案:找出现在位于模块的位置

ls -l /usr/lib/php5

应该有一个类似于旧20090626的目录。就我而言,它现在是20131226

给您错误的.ini文件位于/etc/php5/cli/conf.d/

只需编辑哪些.ini文件,哪个模块会给您一个错误。例如,如果错误是针对mcrypt模块:

sudo vi /etc/php5/cli/conf.d/20-mcrypt.ini

更改行:

extension=/usr/lib/php5/20090626/mcrypt.so

反映.so文件的新路径。在我的情况下,正确的路径应该是:

extension=/usr/lib/php5/20131226/mcrypt.so

那就是它!错误消失了。你必须对每个模块做错误。

答案 4 :(得分:6)

如果你把;符号,此操作无效扩展。

我遇到了同样的问题并做了以下事情:

  1. 使用purge参数卸载php:

    sudo apt-get --purge remove php5-common
    
  2. 再次安装:

    sudo apt-get install php5 php5-mysql
    

答案 5 :(得分:3)

如果您使用的是5.6 php,

sudo apt-get install php5.6-curl

答案 6 :(得分:2)

我的问题通过以下命令解决了

sudo apt-get install php5-mcrypt

我有

  • PHP 5.3.10-1ubuntu3.4 with Suhosin-Patch(cli)
  • Ubuntu Desktop 12.04
  • Mysql 5.5

答案 7 :(得分:2)

我在blog.tordeu.com找到了这个解决方案,而且它是

sudo aptitude purge php5-suhosin

我不确定,但似乎不再需要suhosin,它适用于我的PHP版本:

PHP 5.4.34-1+deb.sury.org~lucid+1 (cli) (built: Oct 17 2014 15:26:51)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

答案 8 :(得分:0)

不知何故,gmp.so文件似乎已从我的系统中删除。这就是为我解决的问题:

sudo apt-get install --reinstall php5-gmp

答案 9 :(得分:0)

对于Ubuntu 14.04,我只是为mcrypt收到了这个错误:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/mcrypt.ini' - /usr/lib/php5/20121212/mcrypt.ini: cannot open shared object file: No such file or directory in Unknown on line 0

如果你仔细看看错误,php正在寻找mcrypt.ini而不是那个位置的mcrypt.so。我只是将mcrypt.so复制到mcrypt.ini并且就是这样,警告消失了,现在扩展已正确安装。它可能看起来有点脏,但它有效!

答案 10 :(得分:0)

我通过取消注释

在php.ini中启用了extension_dir
  extension_dir = "ext"
  extension=phpchartdir550.dll

并将phpchartdir550 dll复制到extension_dir(/ usr / lib / php5 / 20121212),导致同样的错误。

  PHP Warning:  PHP Startup: Unable to load dynamic library 'ext/phpchartdir550.dll' - ext/phpchartdir550.dll: cannot open shared object file: No such file or directory in Unknown on line 0
  PHP Warning:  PHP Startup: Unable to load dynamic library 'ext/pdo.so' - ext/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0
  PHP Warning:  PHP Startup: Unable to load dynamic library 'ext/gd.so' - ext/gd.so: cannot open shared object file: No such file or directory in Unknown on line 0

正如@Mike指出的那样,当应用程序中实际不需要时,没有必要安装所有东西。

更简单的方法是在将库复制到正确的位置后提供要加载的扩展的完整路径。

将phpchartdir550.dll复制到/ usr / lib / php5 / 20121212,这是我的Ubuntu 14.04中的extension_dir(可以看到使用phpinfo()) 然后在php.ini中提供库的完整路径,

;   extension=/path/to/extension/msql.so
extension=/usr/lib/php5/20121212/phpchartdir550.dll

重启apache:sudo service apache2 restart

即使其他.so存在于同一目录中,也只能选择性地加载所需的。

答案 11 :(得分:0)

我遇到了类似的问题,导致我来到这里:

$ phpunit --version
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20131226/profiler.so' - /usr/lib/php5/20131226/profiler.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHPUnit 5.7.17 by Sebastian Bergmann and contributors.

与上述不同,安装软件并没有解决我的问题,因为我已经有了它。

$ sudo apt-get install php5-uprofiler
Reading package lists... Done
Building dependency tree       
Reading state information... Done
php5-uprofiler is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 52 not upgraded.

我通过以下方式找到了我的解决方案:Debian Bug report logs

$ sudo vim /etc/php5/mods-available/uprofiler.ini

我编辑了ini文件,将 extension = profiler.so 更改为 extension = uprofiler.so ....结果,愉快地:

$ phpunit --version
PHPUnit 5.7.17 by Sebastian Bergmann and contributors.

即。没有更多的警告。

答案 12 :(得分:0)

(对于Ubuntu用户)

我遇到了同样的问题,但以上答案均未解决。这是我解决问题的方法。

打开您的php.ini文件(我的文件位于/etc/php/7.3/cli/php.ini中)。

您可能会遇到类似这样的事情:

extension=pdo_mysql

或者也许:

extension=/here/is/the/path/to/your/file/pdo_mysql.so

extension=pdo_mysql

之前添加以下行
extension=pdo

因此,您将拥有:

extension=pdo
extension=pdo_mysql

问题似乎是(至少就我而言),我们需要首先加载pdo扩展名才能加载pdo_mysql扩展名。

希望有帮助!

答案 13 :(得分:-1)

试试这个:

  • 打开php.ini
  • 路径:etc / php5 / cli / php.ini
  • 删除或评论:extension = ssh2.so然后保存。