在 Ubuntu(20.4?)上運行 DigitalOcean Droplet
我的用戶A具有root權(quán)限。它們還連接到 postgres 數(shù)據(jù)庫中的 userA。
由于我正在使用的軟件的設置,它們需要 postgresdb 的特定用戶名。為了避免在網(wǎng)上暴露太多數(shù)據(jù),我們將其稱為 userB。這既是 linux 又是 postgres 用戶。
我正在運行一個 php 命令,該命令基本上采用(uname、dbname、pdo、選項)作為輸入,但它當前失敗,因為它無法找到 pdo 文件。
我瀏覽了一些帖子。有人建議取消所有 php.ini 文件中所有 pgsql 和 pdo_pgsql 行的注釋,我已經(jīng)這樣做了,無論是用于生產(chǎn)、開發(fā)還是該文件的通用版本。
當我以 userA 和 userB 身份運行命令時,出現(xiàn)此錯誤。
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 網(wǎng)站說要運行一個
./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),但是這有沒有制作。/為我配置一個可用的命令。
我還發(fā)現(xiàn)一篇文章說需要更新 apache 中的 conf 文件以顯示 PDO 文件的位置,但是我還沒有運行服務器,我只是運行一個填充的 php 文件本地 pgsql 數(shù)據(jù)庫。 (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
盡管根據(jù) 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
盡管我認為他們根據(jù)您選擇的數(shù)據(jù)庫軟件給出了不同驅(qū)動程序的多個示例。
我不太確定該怎么做。
更新:
我嘗試通過編輯 php 使用的 php.ini 文件
php -i | grep ini
我用過
locate pdo_pgsql
查找 pdo_pgsql 和 pdo_pgsql.so 文件路徑。我已嘗試對 php.ini 文件進行 4 種不同的編輯。 2 取消注釋(一次一個)默認的 pgsql 擴展。 2 是通過locate 在我的系統(tǒng)上找到的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
中,您應該已經(jīng)有一個有關(guān)如何啟用 pgsql 的示例:
extension=pdo_pgsql
不是module=
我不知道您的 PHP 版本是什么,但請確保您安裝了適當版本的 php7.X-pgsql
,因為您的庫版本似乎錯誤。
您也許可以在問題中添加以下輸出:
dpkg -l|grep pgsql dpkg -l|grep php php -v