在 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
,因为您的库版本似乎错误。您也许可以在问题中添加以下输出: