web-dev-qa-db-fra.com

Erreur fatale: appel de la fonction non définie pg_connect ()

J'essaie de me connecter à ma base de données (serveur distant) sur laquelle PostgreSQL est installé. Mon code PHP tente de se connecter à la base de données avec pg_connect (), mais le message d'erreur suivant s'affiche: - "Erreur fatale: appel de la fonction non définie pg_connect () dans /var/www/website/functions.php on ligne 82 ".

La ligne 82 est simplement:

$db = pg_connect($conn_string);
where $conn_string = "Host=".$hostname." port=5432 dbname=".$dbname." user=".$db_user." password=".$db_password.""

(toutes les variables définies précédemment)

J'ai vérifié de nombreux forums et la seule solution suggérée a été de localiser le fichier php.ini qui contient une ligne: - extension = pgsql.so (pour UNIX) et extension = php_pgsql.dll (pour Windows). 

Cette déclaration est supposée être commentée et la solution consiste à la décommenter. Je l'ai essayé mais ne change toujours pas la situation. Le serveur distant a une version ultérieure à PostgreSQL v9.0.4 installée. J'ai ensuite installé PostgreSQL v8.4.8 sur mon ordinateur portable et ai exécuté le site Web localement en utilisant MAMP. Au début, Apache s’est écrasé pour une raison étrange, j’ai résolu ce problème, mais j’ai retrouvé la même erreur qu’auparavant, erreur fatale: appel de la fonction non définie pg_connect () ....

J'ai également exécuté la phpinfo() et elle a montré que la version php prend en charge le module PostgreSQL. J'ai passé une journée entière à rechercher la solution, mais sans succès. Il s’agit de mon premier projet de développement d’un site Web et je suis à court d’esprit. Toute aide sera très appréciée.

phpinfo () me donne une liste énorme de choses sur le terminal mais les listes pertinentes pour PostgreSQL sont les suivantes: -

pdo_pgsql

PDO Driver for PostgreSQL => enabled
PostgreSQL(libpq) Version => 9.0.4
Module version => 1.0.2
Revision =>  $Id: pdo_pgsql.c 306939 2011-01-01 02:19:59Z felipe $ 

pgsql

PostgreSQL Support => enabled
PostgreSQL(libpq) Version => 9.0.4
Multibyte character support => enabled
SSL support => enabled
Active Persistent Links => 0
Active Links => 0

Directive => Local Value => Master Value
pgsql.allow_persistent => On => On
pgsql.auto_reset_persistent => Off => Off
pgsql.ignore_notice => Off => Off
pgsql.log_notice => Off => Off
pgsql.max_links => Unlimited => Unlimited
pgsql.max_persistent => Unlimited => Unlimited

J'avais relancé MAMP après chaque modification effectuée depuis ma publication dans tous les messages que j'ai lus jusqu'à présent. Je crois que cela réinitialise Apache et php.

'pqsql.so' (qui est l'équivalent UNIX de 'php_pqsql.dll' dans Windows) est présent dans le répertoire 'extension'. J'ai également copié-collé le fichier 'pqsql.so' dans le répertoire Apache/bin mais cela ne m'a apporté aucun changement.

Je ne cours pas principalement en ligne de commande php. J'étais juste curieux de voir ce que phpinfo () me donnerait concernant pgsql que j'ai mentionné dans ma réponse ci-dessus.

Je travaille toujours sur les outils que vous avez mentionnés et je vous répondrai dès que j'aurai des résultats.

Merci, H

28
hrshd

Vous devez installer le paquet php-pgsql ou ce qu'il appelle pour votre plate-forme. Ce que je ne pense pas que vous ayez dit au fait.

Sur Ubuntu et Debian:

Sudo apt-get install php5-pgsql
43
Scott Marlowe
Easy install for ubuntu:

Just run,
> Sudo apt-get install php5-pgsql
 then
> Sudo service Apache2 restart //restart Apache

ou 

Uncomment the following in php.ini by removing the ";"

;extension=php_pgsql.dll

then
restart Apache 
14
Angelin Nadar

Erreur fatale: appel de la fonction non définie pg_connect () ...

J'ai eu cette erreur quand j'installais Lampp ou xampp dans Archlinux,

La solution a été éditer le php.ini, il est situé dans /opt/lampp/etc/php.ini

puis trouver cette ligne et décommenter

extension = "pgsql.so"

puis redémarrez le serveur Apache avec xampp et testez ...

Bonne chance

7
davidleosam

Modifier. Je viens de remarquer que vous avez mentionné MAMP. Mon conseil est pour Windows mais peut être utile si vous connaissez les outils correspondants à utiliser.

_ {Choses à essayer} _:

  • Avez-vous redémarré PHP et Apache depuis votre édition de php.ini?

  • Le php_pgsql.dll se trouve-t-il dans votre répertoire php\ext?

  • Utilisez-vous php en tant que module? Si tel est le cas, essayez de copier le fichier php_pgsql.dll dans le répertoire Apache\bin.

  • Exécutez-vous PHP à partir de la ligne de commande avec un indicateur spécifiant un fichier php.ini Different?

  • Vous pouvez utiliser un outil tel que Filemon de Sysinternals pour voir quels fichiers Tentent d’être consultés lors de l’exécution de PHP.

  • Vous pouvez utiliser un outil tel que Dependency Walker pour examiner les dépendances de la DLL postgreSQL, au cas où vous auriez une dépendance manquante. Recherche rapide affichée ldd pour Unix.

6
JRL
  1. Ajoutez 'PHPIniDir "C:/php"' dans le fichier httpd.conf. (Si Vous avez enregistré votre PHP dans C :, ou indiquez l'emplacement où PHP.__ est enregistré.)
  2. Ne commentez pas l'option 'extension = php_pgsql.dll' dans le fichier Php.ini
  3. Décommenter '; extension_dir = "ext"' dans php.inidirectory
5
Chetan

J'ai eu le même symptôme dans win7. J'ai eu ce script:

<?php
    phpinfo();
    pg_connect("blah");

Lorsque j'ai exécuté le script phpinfo.php via Apache ( http: //localhost/phpinfo.php ), le message d'erreur suivant s'est affiché: Appel de la fonction non définie pg_connect () dans ...

Lorsque j’ai exécuté le script identique à partir de la ligne de commande (php phpinfo.php), j’ai reçu le message attendu: PHP Avertissement: pg_connect (): impossible de se connecter à Serveur PostgreSQL: manque "=" après "blah"

Dans les deux cas, le fichier php.ini attendu a été utilisé:

Loaded Configuration File   C:\Program Files (x86)\php\php.ini 

mais la section pgsql était complètement absente de phpinfo dans le cas d'une exécution basée sur Apache et elle était présente dans l'exécution basée sur la ligne de commande.

La solution est que j'ai ajouté la ligne suivante à Apache httpd.conf:

LoadFile "C:/Program Files (x86)/php/libpq.dll"

Il semble que, pour une raison quelconque, ce fichier n'est pas chargé automatiquement lorsque Apache exécute le script php, mais il est chargé si j'exécute le script php à partir de la ligne de commande.

J'espère que ça aide. 

1
Csongor Halmai

Pour php 5.4 sur Centos 6.10, nous incluons ces lignes dans php.ini

extension=/opt/remi/php54/root/usr/lib64/php/modules/pdo.so
extension=/opt/remi/php54/root/usr/lib64/php/modules/pgsql.so
extension=/opt/remi/php54/root/usr/lib64/php/modules/pdo_pgsql.so

Ça marche.

1
Alf Newman

J'ai aussi eu ce problème sur OSX. La solution supprimait le commentaire extension = pgsql.so dans php.ini.default et supprimait le suffixe .default, car le fichier php.ini n'y était pas. 

Si vous utilisez XAMPP, le fichier php.ini réside dans/XAMPP/xampfiles/etc

1
user9548

installez le paquetage requis .. si vous utilisez yum:

yum search pgsql

ensuite, regardez le résultat et trouvez tout ce qui ressemble à 'php-pgsql' ou quelque chose comme ça. copiez le nom puis:

yum install *paste the name of the package here*
0
Maya SC

Supprimer le commentaire extension=php_pgsql.dll dans les fichiers de configuration php.ini fonctionne, mais vous devrez peut-être également redémarrer votre serveur XAMPP pour enfin le faire fonctionner. Je devais faire ça. 

0
Adim Victor

Sur Gentoo, utilisez le drapeau USE postgres dans /etc/portage/make.conf et relancez "emerge php"

0
kemals

Pour ceux d'entre vous qui ont ce problème avec PHP 5.6, vous pouvez utiliser la commande suivante:

yum install php56w-pgsql

Pour obtenir une liste de noms de packages supplémentaires pour PHP 5.6, ouvrez le lien suivant et faites défiler les packages:

PHP 5.6 sous CentOS/RHEL 7.0 et 6.6 via Yum

0
SPRBRN

J'ai rencontré cette erreur et elle a fini par être liée au chargement de l'extension_dir de PHP.

Si lors de l'impression de phpinfo (), vous trouvez que, sous l'en-tête de PDO, PDO drivers est défini sur aucune valeur, vous pouvez vérifier que vous avez bien chargé votre répertoire de postes, comme indiqué dans cet article :

https://stackoverflow.com/a/14786808/2578505

0
quetzaluz

Vous devez suivre ces étapes:

Ouvrez le fichier de configuration php, situé dans le répertoire suivant 

C: \ xampp \ php \ php.ini

Dans ce fichier, recherchez la section extension et décommentez les lignes suivantes 

extension = php_pdo_pgsql.dll  
extension = php_pgsql.dll

et redémarrez votre Apache

0