PHP启动:无法加载动态库PGSQL

15

我正在尝试在以下环境中运行Symfony 3.x:

  • Ubuntu 16.04
  • PHP 7.0
  • NGinx

我想与我创建的PGSQL数据库进行交互,但是我遇到了这个错误:

  

PHP警告:PHP启动失败:无法加载动态库'/usr/lib/php/20151012/php_pdo_pgsql.dll' - /usr/lib/php/20151012/php_pdo_pgsql.dll:找不到共享对象文件。未知行0

     

[Doctrine\DBAL\Exception\DriverException]驱动程序中发生了异常:找不到驱动程序
                                                                                     [Doctrine\DBAL\Driver\PDOException]无法找到驱动程序

     

[PDOException]找不到驱动程序

因此,我查看了我的phpinfo(),似乎pgsql驱动程序已启用

phpinfo() result

有人可以帮忙解决这个问题吗?

6个回答

7

您必须正确安装并启用PostgreSQL模块。http://php.net/manual/en/pgsql.installation.php

附注:在基于UNIX的服务器上不要使用'.dll'文件,因为这些扩展是为Windows操作系统编译的(对于基于UNIX的操作系统,您必须使用'.so'文件)。


我已经尝试过了,它说php7.0-pgsql已经是最新版本了 :/我需要将其删除并重新安装吗? - Hurobaki
1
php_pdo_pgsql.dll是为Windows操作系统编译的扩展。 (-; - Neodan
我明白了,但我不知道我是如何得到.dll而不是.so的... ^^ - Hurobaki
你尝试从你的php.ini文件中删除'extension=php_pdo_pgsql.dll'了吗? - Neodan
我想让你知道,使用正确的PHP版本重新安装PostgreSQL模块并在我的php.ini中注释.dll起作用了!谢谢你的帮助 :) - Hurobaki
显示剩余2条评论

5

对我来说,以上所有解决方案都没有奏效。仅仅在php.ini中取消注释extension=pgsql也没有起作用。

即使我已经在Ubuntu上安装了postgresql,但似乎它并未被安装。

sudo apt-get install postgresql-12 

最后,我意识到我需要安装:

sudo apt-get install php-pgsql

1
针对特定版本进行安装:sudo apt-get install php7.4-pgsql - NVRM

4
我遇到了非常类似的问题:
我通过应用与此主题相同的补丁来解决它:pdo_parse_params error in pdo_odbc.so whenever PHP starts in Fedora 20 简而言之:如果一个模块已经被加载到/etc/php/7.2/mods-available/<module>.ini(或者您的操作系统等效路径)中,则不应在php.ini文件中取消注释(=激活)该模块。 (其中两个是cli和server)。
您可以通过检查phpinfo()来确保这一点,并观察pdo_pgsql仍然处于活动状态,尽管在php.ini中该行被注释!

是的,解决方法可以回到使用过的 php.ini(CLI),然后用 ; 注释掉它。 :D - jave.web

1

我曾遇到类似问题,在安装了PHP pg驱动程序后,我需要将两个文件添加到/etc/php.d目录下。

20-pgsql.ini

extension=pgsql.so

30-pdo-pgsql.ini

extension=pdo_pgsql.so

将这些扩展配置行放入php.ini中仍然会出现pdo_parse_params错误。

不需要创建额外的文件,只需在php.ini文件中取消注释那些行即可。 - B. Amine

0
唯一对我有效的解决方案似乎是在 /etc/php8.1/cli/php.ini 中在它们前面添加 ;,注释掉 extension=pdo_pgsqlextension=pgsql
;extension=pdo_pgsql
;extension=pgsql

这是针对 PHP 8.1 版本的。


-1

在 /etc/php8.1/cli/php.ini 文件中,在 extension=pdo_pgsql 和 extension=pgsql 前面添加 ;,将其注释掉:

  • ;extension=pdo_pgsql
  • ;extension=pgsql

必须对此答案进行负评,因为该答案似乎与所问问题不相符。问题明确说明环境中使用的PHP版本是v7,而该答案并不适用。提问者清楚地解释了php.ini中存在配置错误,试图加载一个在Linux(Ubuntu)环境中不存在的pdo_pgsql.dll扩展。 - Saravanakumar Arumugam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接