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
如果某些东西在您的 DEV enc 上不起作用,请不要在 PROD 上尝试它..这违背了拥有 DEV env 的目的..
在
php.ini
中,您应该已经有一个有关如何启用 pgsql 的示例:不是
module=
我不知道您的 PHP 版本是什么,但请确保您安装了适当版本的
php7.X-pgsql
,因为您的库版本似乎错误。您也许可以在问题中添加以下输出: