首頁  >  問答  >  主體

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 天前339

全部回覆(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
  • 取消回覆