72
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
4

13 回答 13

141

即使其他几个答案表明了这一点,安装更多不必要的软件通常也不是最好的解决方案。相反,您应该解决根本问题。出现这些消息的原因是您尝试加载这些扩展,但未安装它们。所以简单的解决方案就是告诉 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 发生在我身上,所以希望这对其他人有帮助。

于 2013-06-09T03:39:02.457 回答
47
sudo apt-get install php5-mcrypt
sudo apt-get install php5-mysql

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

希望能帮助到你

于 2012-08-01T19:32:49.410 回答
13

查看 /etc/php5/cli/conf.d/ 并删除对应的 *.ini 文件。当您删除一些不那么干净的 php 包时会发生此错误。

于 2013-05-13T14:21:31.910 回答
12

好像您将 PHP 升级到较新版本,并且旧的 .ini 文件仍指向旧位置。

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

ls -l /usr/lib/php5

应该有一个类似于 old 的目录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

而已!错误消失了。Ofc 你必须对每个模块都做这件事,给你一个错误。

于 2016-01-28T21:23:58.770 回答
6

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

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

  1. 使用 purge 参数卸载 php:

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

    sudo apt-get install php5 php5-mysql
    
于 2014-02-02T13:17:13.987 回答
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
于 2014-11-13T06:07:16.680 回答
2

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

sudo apt-get install php5-mcrypt

我有

  • PHP 5.3.10-1ubuntu3.4 与 Suhosin-Patch (cli)
  • Ubuntu 桌面 12.04
  • mysql 5.5
于 2012-12-14T03:53:29.943 回答
2

如果您使用的是 5.6 php,

sudo apt-get install php5.6-curl

于 2017-01-09T17:44:00.510 回答
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 就可以了,警告消失了,现在扩展程序已正确安装。它可能看起来有点脏,但它有效!

于 2015-01-24T16:31:51.560 回答
0

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

sudo apt-get install --reinstall php5-gmp

于 2013-07-12T14:59:41.053 回答
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扩展。

希望有帮助!

于 2019-08-24T11:55:03.240 回答
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 存在于同一目录中,也只能有选择地加载所需的。

于 2016-03-16T07:58:03.213 回答
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.

即没有更多的警告。

于 2017-04-02T12:45:24.650 回答