web-dev-qa-db-fra.com

Activation du support PostgreSQL dans PHP sur Mac OS X

J'ai beaucoup de mal à faire en sorte que la commande "pg_connect ()" fonctionne correctement sur mon Mac. J'écris actuellement un script PHP (à exécuter à partir de la console) pour lire une base de données PostgreSQL et envoyer un rapport par courrier électronique. 

Je suis allé dans mon fichier php.ini et j'ai ajouté 

extension=pgsql.so

Mais, j'ai rencontré l'erreur suivante. 

Avertissement PHP: PHP Démarrage: impossible de charger la bibliothèque dynamique '/usr/lib/php/extensions/no-debug-non-zts-20090626/php_pgsql.so' - dlopen (/ usr/lib/php/extensions /no-debug-non-zts-20090626/php_pgsql.so, 9): image introuvable dans Inconnu à la ligne 0
PHP Erreur fatale: appel de la fonction non définie pg_connect () dans ... (fichier blah ici)

Lors de l'exécution de phpinfo(), je ne vois rien de PostgreSQL, alors quel est mon problème ici?

29
Jordan Scales

La version PHP fournie avec OS X n'inclut pas PostgreSQL. Vous devrez compiler l'extension vous-même. Voici quelques instructions:

  1. Trouvez votre version de PHP: php -v.
  2. Téléchargez la version de PHP qui correspond à la vôtre: curl -O http://us.php.net/distributions/php-5.3.3.tar.gz. (Cet exemple télécharge PHP 5.3.3 mais cela doit correspondre à votre version)
  3. Extrayez l'archive que vous avez téléchargée: tar -xzvf php-5.3.3.tar.gz
  4. Passez au répertoire d'extension de PostgreSQL: cd php-5.3.3/ext/pgsql/
  5. Tapez phpize.
  6. Tapez ./configure.
  7. Tapez make.
  8. Tapez Sudo make install.
  9. Ajoutez l'extension à votre fichier php.ini en ajoutant extension=pgsql.so. (Vous l'avez peut-être déjà fait)
  10. Redémarrez Apache.

Mise à jour pour OS X Mountain Lion Apple a supprimé autoconf des versions plus récentes de XCode, de sorte que la procédure ci-dessus échouera à l'étape 5. Pour résoudre ce problème:

  1. Tapez /usr/bin/Ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)".
  2. Tapez Sudo chown -R $USER /usr/local/Cellar.
  3. Tapez brew update.
  4. Tapez brew install autoconf.

Cela devrait installer autoconf et vous permettre d’installer le module en suivant les instructions ci-dessus.

71
Francois Deschenes

Si vous utilisez home brew, vous pouvez résoudre ce problème avec une commande aussi simple que:

brew install php55-pdo-pgsql

pour les autres versions php, cherchez avec:

brew search pgsql

36
Daniel Cukier

Cela a fonctionné pour moi avec OSX 10.9.4 « Mavericks »

Installer des sources

Téléchargez le code source PHP. Contrairement à Mountain Lion, aucun en-tête n’est préinstallé, il est donc nécessaire de le mettre dans/usr/include/php. Mavericks est livré avec PHP 5.4.17, mais la dernière source 5.4.x de php.net devrait faire:

tar -jxvf php-5.4.20.tar.bz2
Sudo mkdir -p /usr/include
Sudo mv php-5.4.20 /usr/include/php

Configurez PHP

cd /usr/include/php
./configure --without-iconv
Sudo cp /etc/php.ini.default /etc/php.ini

Construire un module

J'avais besoin du module pdo_pgsql - le même modèle devrait s'appliquer à n'importe quel module, à condition que les dépendances nécessaires soient installées:

cd ext/pdo_pgsql

Dans mon cas, j'ai eu l'erreur suivante: 

Impossible de trouver autoconf. Veuillez vérifier votre installation autoconf et la variable d’environnement $ PHP_AUTOCONF. Ensuite, réexécutez ce script. ERREUR: `Phpize 'a échoué

J'ai donc dû utiliser cette commande:

brew install autoconf

Ensuite:

phpize

Après cela, j'ai essayé de faire: ./configure

mais j'ai eu le problème suivant:

vérification de pg_config ... non trouvé configure: erreur: impossible de trouver libpq-fe.h. Veuillez spécifier le chemin d'installation correct de PostgreSQL

La solution consistait donc à spécifier le chemin d'installation correct de PostgreSQL:

./configure --with-pdo-pgsql=/Library/PostgreSQL/9.3/
make
Sudo make install

Cela copie pdo_pgsql.so dans/usr/lib/php/extensions/no-debug-non-zts-20100525. 

Ensuite, ajoutez simplement 

extension=pdo_pgsql.so to /etc/php.ini 

Exécutez php -m pour confirmer que tout s'est déroulé comme prévu. 

8
Jorge Casariego

Pour ceux qui ont installé php7/nginx/postgres avec homebrew

Vous pouvez installer le module PostgreSQL avec:

brew install php70-pdo-pgsql

Après cela, vous devez redémarrer le service php:

brew services restart php70
7
ricardo

Les utilisateurs de OS X El Capitan peuvent simplement mettre à niveau leur version de PHP 5.6. Ceci est un one-line qui fera cela.

curl -s http://php-osx.liip.ch/install.sh | bash -s 5,6

Pour php56 par brassage:

brew install php56-pdo-pgsql
3
ThangTD

PostgreSQL par défaut est installé à un emplacement inhabituel sur MAC OS X:

/Library/PostgreSQL/9.3

Étant donné l'emplacement ci-dessus, vous pouvez taper ceci:

./configure --with-pgsql=/Library/PostgreSQL/9.3
2
YP Leung

J'ai tué toute la journée en essayant de faire fonctionner El Capitan après avoir effectué une mise à niveau hier et il est apparu que j'avais oublié de modifier httpd.conf et de changer le chemin d'accès du module php par défaut (version 5.5.27) à celui que j'avais installé ( version 5.6.14). Cela devrait être fait dans httpd.conf en modifiant votre chemin par défaut LoadModule php5_module en LoadModule php5_module /usr/local/opt/php56/libexec/Apache2/libphp5.so. Je viens de décider de le laisser ici comme solution potentielle pour ceux qui mettent à jour leur système d’exploitation ou tout simplement la version PHP et font face au même problème.

2
ievgenii

J'ai téléchargé PostgreSQL pour Mac et utilisé le générateur de pile après l'installation pour mettre bout à bout l'intégralité de la pile EnterpriseDB Apache/PHP. Je mentionne cela comme une option permettant de gagner du temps, probablement pas idéale pour toutes les situations. Devrait fonctionner correctement si Apache et Postgres fournis avec Mac OS X n’ont jamais été démarrés. 

Pour que les applications hébergées Apache existantes (c'est-à-dire les installations héritées pré-PostgreSQL) restent stables, il suffit d'installer le nouveau Apache EnterpriseDB sur le port 81 (stackbuilder demandera un nouveau port si l'instance Apache héritée est déjà en cours d'exécution). Ensuite, utilisez mod_proxy dans httpd.conf pour Apache exécuté sur le port 80 afin de fournir une expérience utilisateur transparente aux applications hébergées sur PostgreSQL. 

0
Net Dawg

Pour ceux qui ont une erreur openssl alors que make voici la solution

OSX utilise openssl 0.98 pendant que le programme d'installation recherche 1.0.0

reportez-vous à ce lien pour obtenir des instructions

Erreur d'installation de psycopg2 - Bibliothèque non chargée: libssl.dylib

0
Majky