在 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###
如果某些東西在您的 DEV enc 上不起作用,請不要在 PROD 上嘗試它..這違背了擁有 DEV env 的目的..
在
php.ini
中,您應該已經有一個有關如何啟用 pgsql 的範例:不是
module=
#我不知道您的 PHP 版本是什麼,但請確保您安裝了適當版本的
php7.X-pgsql
,因為您的庫版本似乎錯誤。您也許可以在問題中加入以下輸出: