【问题标题】:PHP not loading php_pgsql.dll on WindowsPHP 没有在 Windows 上加载 php_pgsql.dll
【发布时间】:2010-10-07 19:04:11
【问题描述】:

PHP 5.2.8 拒绝加载php_pgsql.dll,出现以下错误:

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

在第 0 行的未知中

.dll 存在于 PHP/ext/ 中。

以前在 Windows 上是否有其他人在使用 PHP 时遇到过这个问题?

【问题讨论】:

  • 这是我在使用 PHP 和 DLL 时经常遇到的问题。我只是将有问题的 DLL 复制到 C:\WINDOWS 并停止使用它。 PHP 的路径处理非常糟糕,以至于我什至不关心以“正确的方式”进行处理。
  • 看这里用pgsql编译PHP:wiki.php.net/internals/windows/stepbystepbuild

标签: php windows postgresql


【解决方案1】:

我唯一一次看到这个错误(文件名和 ext 路径绝对正确)是在我尝试使用不正确版本的 DLL 时,即。我使用的是针对与我正在运行的不同版本的 PHP 编译的一个。

确保您的版本绝对是针对 PHP 5.2.8 编译的版本。

编辑:或者,文件的权限设置不正确。

【讨论】:

  • 权限很好,这是我通过 PHP 下载获得的 dll,所以我假设它是为正确的版本编译的。有什么办法可以查到吗?
  • 嗯,如果它是下载附带的,应该没问题。抱歉,没有想法 :-( .
【解决方案2】:

问题在于 php_pgsql.dll 使用的相关库 - 例如 libpq.dll、OpenSLL 等。您需要找到它们(从 Postgres 的 zip 分发中,从已安装的 psqlODBC 驱动程序等中)并放置它们在 PATH 中的文件夹中。至于所有 DLL 的列表 - 使用 MS Dependency Walker (depends.exe)。

另一个重要的一点 - Apache(如果您使用的是 Apache)有自己的一组 OpenSSL DLL。替换或重命名这些内容,以免与 Postgres 发行版中的内容发生冲突。

【讨论】:

  • 听起来很复杂 - 但是当我从命令行运行 PHP -v 时,它确实会抛出一个错误,说 libpq.dll 无法加载。我可能只是将我所有的开发转移到 ubuntu box tbh。
  • 例如,在 XAMPP 上,将 PHP 目录(即 C:\xampp\php)放入 system PATH 变量就足够了。
【解决方案3】:

Vista 上 php 的 LIBPQ.DLL 问题...

  • 检查以确保您确实安装了 postgres。如果您在 windows 上使用 postgres API 安装 php,但未安装 postgres,您可能会收到此警告。在 Windows 安装程序上单击所有内容太容易了...

  • 注释掉 php.ini 中的相关行。

【讨论】:

    【解决方案4】:

    只是一个想法——确保 Postgres 二进制文件位于 SYSTEM 路径中,而不是您的用户特定路径中。碰巧,这是我机器上的问题。 :-)

    编辑:

    想一想,这就解释了为什么 Dependency Walker 会报告所有 A-OK 但问题仍然存在——你在自己的帐户下运行 DW,而 Apache 作为 SYSTEM 运行,因此不会有你的个人帐户PATH 设置可用。

    【讨论】:

      【解决方案5】:

      查看 PHP PostgreSQL 安装页面上的信息:http://us.php.net/manual/en/pgsql.installation.php

      在配置了 Apache 的 Windows 服务器上,将以下行添加到 httpd.conf 以加载 libpq.dll 可以为您节省大量时间:

      LoadFile "C:/Program Files/PostgreSQL/8.4/bin/libpq.dll"
      

      请注意,您必须根据已安装的 PostgreSQL 的安装路径和版本相应地更改您的文件夹。另请注意,不建议将 Apache 和 PostgreSQL 放在生产环境的同一台服务器上。

      这立即修复了我的设置。

      【讨论】:

      • 另外...在同一页上,西蒙的第一条评论;它声明 5.2.5“php_pgsql.dll”版本将起作用。它确实:)。惊喜惊喜!...
      • 太棒了!为我省去了很多麻烦!
      • 这个技巧在我的 WAMP 安装中适用于我的 Apache,感谢 Mac,非常感谢您的帮助!
      • 如果 postgre 是 64 位,它将无法工作。在这种情况下,从 postgre 32 位安装中复制 libpq.dll 并放入 apache/bin
      • 谢谢。为我工作! :-)
      【解决方案6】:

      对于此处的 WAMP 服务器设置,您需要将 libpg.dll 文件复制到“C:\wamp\bin\apache\Apache2.2.21\bin\”或类似文件中。将它复制到 ..\php\ext\ 并调整 PATH 环境变量是不够的(如果有效的话)。

      原始答案来自这里:http://www.wampserver.com/phorum/read.php?2,40270,57932

      特别是对于 XAMPP 设置,我发现我只需要将 libpg.dll 文件复制到 ..\php\ext\ 目录中。

      【讨论】:

        【解决方案7】:

        对于那些愿意让他们的 PHP 安装只能够访问 PostGres 服务器,而不实际安装 PostGres,您需要:

        • 在 PHP.INI 中启用 php_pgsql.dll(和 php_pdo_pgsql.dll,如果使用 PDO)扩展,
        • 确保 libpq.dll、libiconv-2.dll 和 libintl-8.dll 在路径中。这些是 php_pgsql.dll 依赖项。

        这 3 个 DLL 可以在 PostGres 安装中找到。我只是将它们复制到 apache\bin 中,这样我就可以保持一切独立。这样做,apache 可以很好地启动 PHP 引擎,并支持 PostGres。

        【讨论】:

          【解决方案8】:

          PHP 5.4.1 也发生在我身上

          到处复制有问题的 DLL 没有用,而且我没有在服务器中安装 PostgreSQL,但我还计划对不同的 Postgres 版本使用 PHP,所以我发现唯一可行的解​​决方案是放入 httpd .conf 这样一行:

          LoadFile "C:/Program Files/PostgreSQL/8.4/bin/libpq.dll"
          

          并指的是与 PHP 捆绑在一起的 libpq.dll,如下所示:

          LoadFile "C:/php/libpq.dll"
          

          之后它对我来说很好。

          【讨论】:

          • 这在 Win7 64 位上节省了我的时间,因为 Program Files/PostreSQL 中的 libpq.dll 无法加载。
          • 我在 Mac 的伎俩之后尝试了这个并且都成功了,谢谢 Dayron。
          • 像魅力一样工作.. 太棒了!
          • 5.4.31 相同。非常感谢!
          • 对 PHP 7.1.5 仍然有效
          【解决方案9】:

          我得到了解决方案:

          1) 如果要加载 php_pdo_pgsql 扩展,请同时加载 php_pdo。 (在 php.ini 中)

          2) php_pgsql.dll 和 php_pdo_pgsql.dll 依赖于 libpq.dll 和 php5ts.dll。 libpg.dll 是来自 postgreSQL 的库,但它已被捆绑到 PHP 的二进制包中。 将 PHP 配置为与 Apache 一起工作时,它无法正确加载依赖库。所以你需要在 Apache 中加载它。

          httpd.conf中的config,这两行应该在LoadModule php5_module之前

          LoadFile "/php5gs.dll 的完整路径" LoadFile "libpg.dll 的完整路径"

          希望对您有所帮助。

          【讨论】:

            【解决方案10】:

            您需要将 libpq.dll 从 wamp\bin\php\php5.3.5 复制到 wamp\bin\apache\Apache2.2.17\bin。再次重新启动 Wamp 服务器。至此,我们完成了 php 配置。接下来我们将安装phpPgAdmin并使用它。

            【讨论】:

              【解决方案11】:

              正如 Ondřej Bouda 所说:设置 Windows 环境变量就足够了。没有 dll 的副本,没有 http-conf 的条目。只需将 php 目录 (C:\xampp\php) 添加到 PATH。如果你使用它,不要忘记重新启动 XAMPP-Control-Panel,否则它不会知道更改。 (并重新启动 Apache。)

              例如,在 XAMPP 上,放置 PHP 目录就足够了 (即 C:\xampp\php)到系统 PATH 变量。 – Ondřej Bouda

              【讨论】:

                【解决方案12】:

                您必须在 httpd.conf 文件中添加以下行:

                PHPIniDir "c:/PHP/"
                Loadfile "C:\php\php5ts.dll"
                
                Loadfile "C:\php\libpq.dll"
                
                LoadModule php5_module "c:/PHP/php5apache2_2.dll"
                

                来源:http://www.php.net/manual/en/pgsql.setup.php

                【讨论】:

                  【解决方案13】:

                  这是对@Dayron Armas Peña 答案的更新。 php 捆绑的 pgsql 'dll' 位于以下位置:

                  LoadFile "C:/wamp/bin/php/php5.4.12/libpq.dll"
                  

                  除了取消注释php.ini 文件中所需的行之外,将上述行添加到httpd.conf 文件已经解决了我的问题。

                  【讨论】:

                    【解决方案14】:

                    我刚做了这个,效果很好 在 php.ini 中的 php 文件夹中,我更改了这一行

                    extension=php_openssl.dll 
                    

                    extension=C:\php\ext\php_openssl.dll 
                    

                    php_openssl.dll 位于 ext 文件夹中,无法找到。

                    【讨论】:

                      【解决方案15】:

                      将文件 libpq.dll 从位置 /bin/php/ 复制到 位置 /bin/apache//bin。重启 wamp 服务器。

                      【讨论】:

                        【解决方案16】:

                        我发现这对我有用:

                        安装PostgreSQL后,需要将libpq.dllwamp\bin\php\phpX.X.X复制到wamp\bin\apache\Apache2.2*\bin。并重新启动 Wampserver。

                        【讨论】:

                          【解决方案17】:

                          只是为了分享对我有用的东西,而不是与 libpq.dll 打交道。我在 php.ini 中取消了 extension=php_pdo_pgsql.dllextension=php_pgsql.dll 的注释。起初,apache 拒绝启动。

                          然后我将"C:\Program Files (x86)\PostgreSQL\9.4\bin\"(取决于您的安装)添加到windows环境PATH中,成功启动apache并运行。

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2016-09-08
                            • 1970-01-01
                            • 2012-09-30
                            • 2017-06-30
                            • 1970-01-01
                            • 2019-02-12
                            • 2019-08-02
                            • 2012-04-18
                            相关资源
                            最近更新 更多