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?
La version PHP fournie avec OS X n'inclut pas PostgreSQL. Vous devrez compiler l'extension vous-même. Voici quelques instructions:
php -v
.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)tar -xzvf php-5.3.3.tar.gz
cd php-5.3.3/ext/pgsql/
phpize
../configure
.make
.Sudo make install
.php.ini
en ajoutant extension=pgsql.so
. (Vous l'avez peut-être déjà fait) 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:
/usr/bin/Ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"
.Sudo chown -R $USER /usr/local/Cellar
.brew update
.brew install autoconf
.Cela devrait installer autoconf
et vous permettre d’installer le module en suivant les instructions ci-dessus.
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
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.
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
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
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
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.
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.
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