Heim  >  Fragen und Antworten  >  Hauptteil

Die PHP-Datei pdo_pgsql existiert, wird aber nicht erkannt

DigitalOcean Droplet unter Ubuntu (20.4?) ausführen

Mein Benutzer A hat Root-Berechtigungen. Sie sind auch mit BenutzerA in der Postgres-Datenbank verbunden.

Aufgrund der Einrichtung der von mir verwendeten Software ist ein bestimmter Benutzername für postgresdb erforderlich. Um zu vermeiden, dass zu viele Daten online offengelegt werden, nennen wir sie userB. Dies ist sowohl ein Linux- als auch ein Postgres-Benutzer.

Ich führe einen PHP-Befehl aus, der grundsätzlich (uname,dbname,pdo,options) als Eingabe verwendet, aber derzeit schlägt er fehl, weil er die pdo-Datei nicht finden kann.

Ich habe einige Beiträge durchgesehen. Jemand hat vorgeschlagen, alle pgsql- und pdo_pgsql-Zeilen in allen php.ini-Dateien zu kommentieren, was ich getan habe, sei es für die Produktion, die Entwicklung oder die allgemeine Version der Datei.

Wenn ich den Befehl als BenutzerA und BenutzerB ausführe, erhalte ich diese Fehlermeldung.

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

Allerdings existiert pdo_pgsql.so tatsächlich an diesem Ort. (Sucht es nach einer Datei namens pdo_pgsql, aber pdo_pgsql.so?)

php-Website sagt, dass man eines ausführen soll

./configure

-Befehl, aber es sagt nicht wirklich aus, in welchem ​​Ordner sich configure befindet. Es ist kein Paket, das ich über die CLI installieren kann. (https://www.php.net/manual/en/ref.pdo-pgsql.php)

Auf anderen Seiten heißt es, dass man zuerst autoconf installieren muss (https://unix.stackexchange.com/questions/158960/can-not-run-configure-command-no-such-file-or-directory), aber das gibt es nicht Weg, dies zu machen. /Konfigurieren Sie einen für mich verwendbaren Befehl.

Ich habe auch einen Artikel gefunden, der besagt, dass die Conf-Datei in Apache aktualisiert werden muss, um den Speicherort der PDO-Datei anzuzeigen, aber ich habe den Server noch nicht laufen lassen, ich führe einfach eine PHP-Datei aus, die die lokale pgsql-Datenbank füllt. (pgsql-Erweiterung nicht geladen)

Laufen

php -i | grep PDO

gegeben

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

Obwohl es laut API-Kundendienst zurückkehren sollte

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

Obwohl ich denke, dass es je nach gewählter Datenbanksoftware mehrere Beispiele für unterschiedliche Treiber gibt.

Ich bin mir nicht ganz sicher, was ich tun soll.

Update:

Ich habe es versucht, indem ich die von PHP verwendete php.ini-Datei bearbeitet habe

php -i | grep ini

Ich habe es verwendet

locate pdo_pgsql

Finden Sie die Dateipfade pdo_pgsql und pdo_pgsql.so. Ich habe 4 verschiedene Änderungen an der php.ini-Datei versucht. 2 Kommentieren Sie (eine nach der anderen) die standardmäßigen pgsql-Erweiterungen aus. 2 sind verschiedene Dateipfade zur pdo_pgsql-Datei, die über „locate“ auf meinem System gefunden wurde.

**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

Ausgabe gemäß den unten aufgeführten Benutzeranforderungen

$ 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 Tage vor338

Antworte allen(1)Ich werde antworten

  • 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

    Antwort
    0
  • StornierenAntwort