Exécution de DigitalOcean Droplet sur Ubuntu (20.4 ?)
Mon utilisateur A dispose des autorisations root. Ils sont également connectés à userA dans la base de données postgres.
En raison de la configuration du logiciel que j'utilise, ils nécessitent un nom d'utilisateur spécifique pour postgresdb. Pour éviter d'exposer trop de données en ligne, nous l'appellerons userB. C'est à la fois un utilisateur Linux et Postgres.
J'exécute une commande php qui prend essentiellement (uname,dbname,pdo,options) comme entrée mais elle échoue actuellement car elle ne trouve pas le fichier pdo.
J'ai parcouru quelques articles. Quelqu'un a suggéré de décommenter toutes les lignes pgsql et pdo_pgsql dans tous les fichiers php.ini, ce que j'ai fait, que ce soit pour la production, le développement ou la version à usage général du fichier.
Lorsque j'exécute la commande en tant qu'utilisateurA et utilisateurB, j'obtiens cette erreur.
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
Cependant, pdo_pgsql.so existe réellement à cet emplacement. (Est-ce qu'il recherche un fichier nommé pdo_pgsql mais pdo_pgsql.so ?)
Le site Web php dit d'en exécuter un
./configure
commande, mais elle ne dit pas vraiment dans quel dossier se trouve configure. Ce n'est pas un package que je peux installer à partir du cli. (https://www.php.net/manual/en/ref.pdo-pgsql.php)
D'autres pages indiquent que vous devez d'abord installer autoconf (https://unix.stackexchange.com/questions/158960/can-not-run-configure-command-no-such-file-or-directory), mais il n'y a pas façon de faire ça. /Configurez une commande utilisable pour moi.
J'ai également trouvé un article disant que le fichier de configuration dans Apache doit être mis à jour pour afficher l'emplacement du fichier PDO, mais je n'ai pas encore le serveur en cours d'exécution, je lance simplement un fichier php qui remplit la base de données pgsql locale. (extension pgsql non chargée)
Courir
php -i | grep PDO
donné
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
Bien que selon le service client de l'API, il devrait revenir
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
Bien que je pense qu'ils donnent plusieurs exemples de pilotes différents en fonction du logiciel de base de données que vous choisissez.
Je ne sais pas trop quoi faire.
Mise à jour :
J'ai essayé en éditant le fichier php.ini utilisé par php
php -i | grep ini
Je l'ai utilisé
locate pdo_pgsql
Recherchez les chemins des fichiers pdo_pgsql et pdo_pgsql.so. J'ai essayé 4 modifications différentes du fichier php.ini. 2 Décommentez (une à la fois) les extensions pgsql par défaut. 2 sont des chemins de fichiers différents vers le fichier pdo_pgsql trouvé sur mon système via la localisation.
**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
Sortie selon les exigences de l'utilisateur ci-dessous
$ 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
Si quelque chose ne fonctionne pas sur votre env DEV, ne l'essayez pas sur PROD... cela va à l'encontre de l'objectif d'avoir un env DEV..
Dans
php.ini
, vous devriez déjà avoir un exemple sur la façon d'activer pgsql :Non
module=
Je ne sais pas quelle version de PHP vous avez, mais assurez-vous d'avoir installé la version appropriée
php7.X-pgsql
car vous semblez avoir la mauvaise version de la bibliothèque.Vous pouvez peut-être ajouter le résultat suivant à votre question :