Activer le support PostgreSQL en PHP sur Mac OS X
j'ai beaucoup de mal à obtenir la commande" pg_connect () " pour fonctionner correctement sur mon Mac. Je suis en train d'écrire un script PHP (à exécuter depuis la console) pour lire une base de données PostgreSQL et envoyer un rapport par email.
je suis entré dans mon fichier php.ini
et j'ai ajouté
extension=pgsql.so
mais, j'ai rencontré l'erreur suivante.
PHP Warning: PHP Startup: Unable to load dynamic library '/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 not found in Unknown on line 0
Erreur fatale de PHP: appel à la fonction non définie pg_connect () in... (bla fichier ici)
en lançant phpinfo()
, Je ne vois rien à propos de PostgreSQL, alors quel est mon problème ici?
10 réponses
la version PHP fournie avec OS X n'inclut pas PostgreSQL. Vous devrez compiler l'extension vous-même. Voici quelques instructions:
- Trouvez votre version de PHP:
php -v
. - 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) - extraire l'archive que vous avez téléchargé:
tar -xzvf php-5.3.3.tar.gz
- changement au répertoire d'extension de PostgreSQL:
cd php-5.3.3/ext/pgsql/
- Type
phpize
. - Type
./configure
. - Type
make
. - Type
sudo make install
. - ajouter l'extension à votre fichier
php.ini
en ajoutantextension=pgsql.so
. (Vous avez peut être déjà fait) - Redémarrez Apache.
Mise à jour pour OS X Mountain Lion
Apple a supprimé autoconf
des nouvelles versions de XCode donc la procédure ci-dessus échouera à #5. Pour résoudre ce problème:
- Type
/usr/bin/ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"
. - Type
sudo chown -R $USER /usr/local/Cellar
. - Type
brew update
. - Type
brew install autoconf
.
qui devrait installer autoconf
et vous permettre d'installer le module à l'aide des instructions ci-dessus.
si vous utilisez home brew
, vous pouvez résoudre cela avec une commande aussi simple que:
brew install php55-pdo-pgsql
pour une autre version de php, rechercher avec:
brew search pgsql
cela a fonctionné pour moi avec OSX 10.9.4 " Mavericks
Installer les sources
Téléchargez le code source PHP. Contrairement à Mountain Lion, vous n'avez pas de headers préinstallés pour créer un lien contre, donc vous devez le mettre dans /usr/include/php. Mavericks ships avec PHP 5.4.17, mais le dernier 5.4.source: 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
configurer PHP
cd /usr/include/php
./configure --without-iconv
sudo cp /etc/php.ini.default /etc/php.ini
construction d'un module
j'avais besoin du module pdo_pgsql - le même modèle devrait s'appliquer à n'importe quel module si vous avez installé les dépendances nécessaires:
cd ext/pdo_pgsql
Dans mon cas, j'ai eu l'erreur suivante:
impossible de trouver autoconf. Veuillez vérifier votre installation d'autoconf et le Variable D'environnement $ PHP_AUTOCONF. Puis, exécutez à nouveau ce script. ERREUR: `la commande phpize "a échoué
donc j'ai dû utiliser cette commande:
brew install autoconf
puis:
phpize
Après que j'ai essayé de faire: ./ configurer
mais j'ai eu le problème suivant:
vérification de pg_config... non trouvé configure: error: impossible de trouver libpq-fe.H. Veuillez spécifier le chemin d'installation PostgreSQL correct
donc la solution était pour spécifier le chemin d'installation PostgreSQL correct:
./configure --with-pdo-pgsql=/Library/PostgreSQL/9.3/
make
sudo make install
qui copie pdo_pgsql.so to/usr/lib/php/extensions / no-debug-non-zts-20100525.
puis simplement ajouter
extension=pdo_pgsql.so to /etc/php.ini
Exécuter php -m
afin de confirmer que tout s'est passé comme prévu.
pour ceux qui ont installé php7 / ngix /postgres à la main
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
OS X El Capitan peuvent simplement mettre à jour leur version de PHP 5.6. C'est un paquebot qui le fera.
curl -s http://php-osx.liip.ch/install.sh / bash-s 5.6
PostgreSQL par défaut est installé dans un endroit inhabituel sur MAC OS X:
/Library/PostgreSQL/9.3
vu l'emplacement ci-dessus, vous pouvez taper:
./configure --with-pgsql=/Library/PostgreSQL/9.3
j'ai tué toute la journée en essayant de le faire fonctionner sur El Capitan après avoir fait une mise à jour hier et il s'est avéré que j'ai oublié de modifier httpd.conf
et de changer le chemin du module php par défaut (version 5.5.27) à celui que j'ai installé (version 5.6.14). Cela doit être fait dans httpd.conf
en modifiant votre chemin par défaut LoadModule php5_module
vers LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so
.
Juste décidé de le laisser ici comme la solution potentielle pour ceux qui mettent à jour leur OS ou juste la version PHP et faire face à la même problème.
pour ceux d'entre vous qui ont une erreur openssl tandis que make
voici la solution
OSX utilise openssl 0.98 alors que l'installateur est à la recherche de 1.0.0
consultez ce lien pour plus d'instructions
psycopg2 d'erreur d'installation de la Bibliothèque - pas chargé: libssl.dylib
j'ai téléchargé PostgreSQL pour Mac, et j'ai utilisé le constructeur de pile après l'installation pour mettre en place l'ensemble de la pile D'entreprise Apache/PHP bout à bout. Je mentionne cette option comme une possibilité de gain de temps, probablement pas idéal pour toutes les situations. Devrait fonctionner correctement si l'apache et les postgres expédiés avec Mac OS X n'ont jamais été commencés.
pour maintenir la stabilité des applications hébergées apache existantes( pré-PostgreSQL install legacy), Je n'installerais que les nouvelles Entrepriseb apache sur le port 81 (stackbuilder demandera un nouveau port si l'instance Apache legacy est déjà en cours d'exécution). Ensuite, utilisez mod_proxy dans httpd.conf pour l'apache tournant sur le port 80 pour fournir une expérience utilisateur transparente aux applications hébergées sur PostgreSQL.