Maison  >  Questions et réponses  >  le corps du texte

Le fichier php pdo_pgsql existe mais n'est pas reconnu

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

P粉191610580P粉191610580179 Il y a quelques jours337

répondre à tous(1)je répondrai

  • P粉463824410

    P粉4638244102024-03-22 09:12:49

    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 :

    extension=pdo_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 :

    dpkg -l|grep pgsql
    dpkg -l|grep php
    php -v

    répondre
    0
  • Annulerrépondre