首页  >  问答  >  正文

php pdo_pgsql 文件存在但无法识别

在 Ubuntu(20.4?)上运行 DigitalOcean Droplet

我的用户A具有root权限。它们还连接到 postgres 数据库中的 userA。

由于我正在使用的软件的设置,它们需要 postgresdb 的特定用户名。为了避免在网上暴露太多数据,我们将其称为 userB。这既是 linux 又是 postgres 用户。

我正在运行一个 php 命令,该命令基本上采用(uname、dbname、pdo、选项)作为输入,但它当前失败,因为它无法找到 pdo 文件。

我浏览了一些帖子。有人建议取消所有 php.ini 文件中所有 pgsql 和 pdo_pgsql 行的注释,我已经这样做了,无论是用于生产、开发还是该文件的通用版本。

当我以 userA 和 userB 身份运行命令时,出现此错误。

PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: /usr/lib/php/20190902/pdo_pgsql (/usr/lib/php/20190902/pdo_pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/pdo_pgsql.so (/usr/lib/php/20190902/pdo_pgsql.so: undefined symbol: pdo_parse_params)) in Unknown on line 0

但是,pdo_pgsql.so 实际上确实存在于该位置。 (它是否正在寻找名为 pdo_pgsql 的文件,而是寻找 pdo_pgsql.so?)

php 网站说要运行一个

./configure

命令,但它并没有真正说明configure位于哪个文件夹中。它不是我可以从cli安装的包。 (https://www.php.net/manual/en/ref.pdo-pgsql.php)

其他页面说您必须先安装autoconf(https://unix.stackexchange.com/questions/158960/can-not-run-configure-command-no-such-file-or-directory),但是这有没有制作。/为我配置一个可用的命令。

我还发现一篇文章说需要更新 apache 中的 conf 文件以显示 PDO 文件的位置,但是我还没有运行服务器,我只是运行一个填充的 php 文件本地 pgsql 数据库。 (pgsql 扩展未加载)

正在运行

php -i | grep PDO

给出

PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: /usr/lib/php/20190902/pdo_pgsql (/usr/lib/php/20190902/pdo_pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/pdo_pgsql.so (/usr/lib/php/20190902/pdo_pgsql.so: undefined symbol: pdo_parse_params)) in Unknown on line 0
PDO
PDO support => enabled
PDO drivers => pgsql
PDO Driver for PostgreSQL => enabled

尽管根据 API 的客户服务,它应该返回

PDO
PDO support => enabled
PDO drivers => mysql, odbc, pgsql
PDO Driver for MySQL => enabled
PDO Driver for ODBC (unixODBC) => enabled
PDO Driver for PostgreSQL => enabled

尽管我认为他们根据您选择的数据库软件给出了不同驱动程序的多个示例。

我不太确定该怎么做。

更新:

我尝试通过编辑 php 使用的 php.ini 文件

php -i | grep ini

我用过

locate pdo_pgsql

查找 pdo_pgsql 和 pdo_pgsql.so 文件路径。我已尝试对 php.ini 文件进行 4 种不同的编辑。 2 取消注释(一次一个)默认的 pgsql 扩展。 2 是通过locate 在我的系统上找到的pdo_pgsql 文件的不同文件路径。

**extension=/usr/lib/php/20190902/pdo_pgsql.so**

sudo php file.php

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20190902/pdo_pgsql.so' (tried: /usr/lib/php/20190902/pdo_pgsql.so (/usr/lib/php/20190902/pdo_pgsql.so: **undefined symbol: pdo_parse_params**), /usr/lib/php/20190902//usr/lib/php/20190902/pdo_pgsql.so.so (/usr/lib/php/20190902//usr/lib/php/20190902/pdo_pgsql.so.so: **cannot open shared object file: No such file or directory**)) in Unknown on line 0

**extension=/var/lib/php/modules/7.4/registry/pdo_pgsql**

sudo php file.php

PHP Warning:  PHP Startup: Unable to load dynamic library '/var/lib/php/modules/7.4/registry/pdo_pgsql' (tried: /var/lib/php/modules/7.4/registry/pdo_pgsql (/var/lib/php/modules/7.4/registry/pdo_pgsql: **file too short**), /usr/lib/php/20190902//var/lib/php/modules/7.4/registry/pdo_pgsql.so (/usr/lib/php/20190902//var/lib/php/modules/7.4/registry/pdo_pgsql.so: **cannot open shared object file: No such file or directory)**) in Unknown on line 0
Could not open input file: file.php

**extension=pgsql**

sudo php file.php

**PHP Warning:  Module 'pgsql' already loaded in Unknown on line 0**
Could not open input file: file.php

**extension=pdo_pgsql**

sudo php file.php

PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: /usr/lib/php/20190902/pdo_pgsql (/usr/lib/php/20190902/pdo_pgsql: **cannot open shared object file: No such file or directory**), /usr/lib/php/20190902/pdo_pgsql.so (/usr/lib/php/20190902/pdo_pgsql.so: **undefined symbol: pdo_parse_params**)) in Unknown on line 0
Could not open input file: file.php

按照下面用户的要求输出

$ php -v
PHP 7.4.3 (cli) (built: Mar  2 2022 15:36:52) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

$ dpkg -l|grep pgsql
ii  php-pgsql                       2:7.4+75                           all          PostgreSQL module for PHP [default]
ii  php7.4-pgsql                    7.4.3-4ubuntu2.10                  amd64        PostgreSQL module for PHP

$ dpkg -l|grep php
ii  php-common                      2:75                               all          Common files for PHP packages
ii  php-pgsql                       2:7.4+75                           all          PostgreSQL module for PHP [default]
ii  php7.4-cli                      7.4.3-4ubuntu2.10                  amd64        command-line interpreter for the PHP scripting language
ii  php7.4-common                   7.4.3-4ubuntu2.10                  amd64        documentation, examples and common module for PHP
ii  php7.4-json                     7.4.3-4ubuntu2.10                  amd64        JSON module for PHP
ii  php7.4-opcache                  7.4.3-4ubuntu2.10                  amd64        Zend OpCache module for PHP
ii  php7.4-pgsql                    7.4.3-4ubuntu2.10                  amd64        PostgreSQL module for PHP
ii  php7.4-readline                 7.4.3-4ubuntu2.10                  amd64

P粉191610580P粉191610580179 天前334

全部回复(1)我来回复

  • P粉463824410

    P粉4638244102024-03-22 09:12:49

    如果某些东西在您的 DEV enc 上不起作用,请不要在 PROD 上尝试它..这违背了拥有 DEV env 的目的..

    php.ini 中,您应该已经有一个有关如何启用 pgsql 的示例:

    extension=pdo_pgsql

    不是module=

    我不知道您的 PHP 版本是什么,但请确保您安装了适当版本的 php7.X-pgsql,因为您的库版本似乎错误。

    您也许可以在问题中添加以下输出:

    dpkg -l|grep pgsql
    dpkg -l|grep php
    php -v

    回复
    0
  • 取消回复