【问题标题】:Error In PHP5 ..Unable to load dynamic libraryPHP5中的错误..无法加载动态库
【发布时间】:2026-02-06 15:00:01
【问题描述】:
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

【问题讨论】:

    标签: php


    【解决方案1】:

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

    【讨论】:

    • 从 Debian 6.x 升级到 7.1 后,我遇到了同样的错误。我不知道 suhosinidn 模块在这个较新的包中被删除了.. 非常感谢 grep 行。
    • 非常感谢。这在 Ubuntu 12.04.2 LTS 中运行良好。我还有一个问题:如果我通过放置一个 ; 禁用导致错误的扩展行首的符号,升级后会重新启用吗?
    • @GeppettvsD'Constanzo 升级时,有时会提示是否覆盖配置文件。如果你覆盖它,它可能会覆盖这些,但我不太确定。只需选择否。
    • 我同意,如果你不需要它,为什么要安装它?
    • 我喜欢这种答案,因为它们让你了解发生了什么又名 = 诀窍
    【解决方案2】:
    sudo apt-get install php5-mcrypt
    sudo apt-get install php5-mysql
    

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

    希望对你有帮助

    【讨论】:

    • 您的回答让我的网站再次运行!非常感谢,我真的很感激。我花了几个小时在这上面。我按照一些说明升级 mysql,他们一定省略了这部分。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      好像您将 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
      

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

      【讨论】:

        【解决方案5】:

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

        我遇到了同样的问题并做了以下操作:

        1. 使用 purge 参数卸载 php:

          sudo apt-get --purge remove php5-common
          
        2. 然后重新安装:

          sudo apt-get install php5 php5-mysql
          

        【讨论】:

          【解决方案6】:

          以下命令解决了我的问题

          sudo apt-get install php5-mcrypt
          

          我有

          • 带有 Suhosin 补丁 (cli) 的 PHP 5.3.10-1ubuntu3.4
          • Ubuntu 桌面 12.04
          • Mysql 5.5

          【讨论】:

            【解决方案7】:

            我通过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】:

              如果你使用的是 5.6 php,

              sudo apt-get install php5.6-curl

              【讨论】:

              • 我为 7.* php 安装了命令:sudo apt-get install php-curl
              【解决方案9】:

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

              sudo apt-get install --reinstall php5-gmp

              【讨论】:

                【解决方案10】:

                对于 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 就可以了,警告消失了,现在扩展程序已正确安装。它可能看起来有点脏,但它确实有效!

                【讨论】:

                  【解决方案11】:

                  我通过取消注释在 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 存在于同一目录中,也只能选择性地加载所需的。

                  【讨论】:

                    【解决方案12】:

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

                    $ 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.
                    

                    即没有更多的警告。

                    【讨论】:

                      【解决方案13】:

                      (对于 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 扩展。

                      希望有帮助!

                      【讨论】: