webentwicklung-frage-antwort-db.com.de

Aktivieren der PostgreSQL-Unterstützung in PHP unter Mac OS X

Ich habe eine sehr schwierige Zeit, um den Befehl "pg_connect ()" zu erhalten, damit er auf meinem Mac richtig funktioniert. Ich schreibe gerade ein PHP -Skript (das von der Konsole aus ausgeführt wird), um eine PostgreSQL-Datenbank zu lesen und einen Bericht per E-Mail zu senden. 

Ich bin in meine php.ini-Datei gegangen und habe hinzugefügt 

extension=pgsql.so

Ich habe jedoch den folgenden Fehler erhalten. 

PHP Warnung: PHP Startup: dynamische Bibliothek kann nicht geladen werden '/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): Bild nicht gefunden in Unknown in Zeile 0
PHP Schwerwiegender Fehler: Aufruf der undefinierten Funktion pg_connect () in ... (blah-Datei hier)

Wenn ich phpinfo() betreibe, sehe ich nichts über PostgreSQL. Was ist also mein Problem hier?

29
Jordan Scales

Die im Lieferumfang von OS X enthaltene Version von PHP enthält kein PostgreSQL. Sie müssen die Erweiterung selbst kompilieren. Hier sind einige Anweisungen:

  1. Finden Sie Ihre Version von PHP: php -v.
  2. Laden Sie die Version von PHP herunter, die Ihrer eigenen entspricht: curl -O http://us.php.net/distributions/php-5.3.3.tar.gz. (Dieses Beispiel lädt PHP 5.3.3 herunter, aber dies muss zu Ihrer Version passen.)
  3. Extrahieren Sie das heruntergeladene Archiv: tar -xzvf php-5.3.3.tar.gz
  4. Wechseln Sie in das Erweiterungsverzeichnis von PostgreSQL: cd php-5.3.3/ext/pgsql/
  5. Geben Sie phpize ein.
  6. Geben Sie ./configure ein.
  7. Geben Sie make ein.
  8. Geben Sie Sudo make install ein.
  9. Fügen Sie die Erweiterung zu Ihrer php.ini-Datei hinzu, indem Sie extension=pgsql.so hinzufügen. (Vielleicht haben Sie das schon getan)
  10. Starten Sie Apache neu.

Update für OS X Mountain Lion Apple hat autoconf aus den neueren Versionen von XCode entfernt, so dass das oben beschriebene Verfahren bei # 5 fehlschlägt. Um dieses Problem zu lösen:

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

Das sollte autoconf installieren und die Installation des Moduls anhand der obigen Anweisungen ermöglichen.

71

Wenn Sie home brew verwenden, können Sie dies mit einem Befehl lösen, der so einfach ist:

brew install php55-pdo-pgsql

für andere PHP-Version suchen Sie mit:

brew search pgsql

36
Daniel Cukier

Das funktionierte für mich mit OSX 10.9.4 « Mavericks »

Quellen installieren

Laden Sie den Quellcode PHP herunter. Im Gegensatz zu Mountain Lion erhalten Sie keine Header vorinstalliert, für die eine Verknüpfung erstellt werden soll. Daher müssen Sie ihn in/usr/include/php einfügen. Mavericks wird mit PHP 5.4.17 ausgeliefert, die neueste 5.4.x-Quelle von php.net sollte jedoch Folgendes tun:

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

Konfigurieren Sie PHP

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

Ein Modul bauen

Ich brauchte das pdo_pgsql-Modul - dasselbe Muster sollte für fast jedes Modul gelten, vorausgesetzt, Sie haben die erforderlichen Abhängigkeiten installiert:

cd ext/pdo_pgsql

In meinem Fall hatte ich folgenden Fehler: 

Autoconf kann nicht gefunden werden. Bitte überprüfen Sie Ihre Autoconf-Installation und die Umgebungsvariable $ PHP_AUTOCONF. Führen Sie dann dieses Skript erneut aus. FEHLER: `Phpize 'ist fehlgeschlagen

Also musste ich diesen Befehl verwenden:

brew install autoconf

Dann:

phpize

Danach habe ich versucht zu tun: ./configure

aber ich hatte das nächste problem:

Überprüfung auf pg_config ... nicht gefunden configure: error: Kann nicht gefunden werden libpq-fe.h. Bitte geben Sie den korrekten PostgreSQL-Installationspfad an

Die Lösung bestand also darin, den korrekten PostgreSQL-Installationspfad anzugeben:

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

Das kopiert pdo_pgsql.so nach/usr/lib/php/extensions/no-debug-non-zts-20100525. 

Dann einfach hinzufügen 

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

Führen Sie php -m aus, um zu bestätigen, dass alles nach Plan verläuft. 

8
Jorge Casariego

Für diejenigen, die php7/nginx/postgres mit Homebrew installiert haben

Sie können das PostgreSQL-Modul folgendermaßen installieren:

brew install php70-pdo-pgsql

Danach müssen Sie den PHP-Dienst neu starten:

brew services restart php70
7
ricardo

Benutzer von OS X El Capitan können einfach ihre Version von PHP 5.6 aktualisieren. Dies ist ein One-Liner, der das tun wird.

curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6

Für php56 via brew:

brew install php56-pdo-pgsql
3
ThangTD

PostgreSQL wird standardmäßig an einem ungewöhnlichen Ort unter MAC OS X installiert:

/Library/PostgreSQL/9.3

An der Stelle oben können Sie Folgendes eingeben:

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

Ich habe den ganzen Tag umgebracht, als ich versucht hatte, El Capitan zum Laufen zu bringen, nachdem ich gestern ein Upgrade durchgeführt hatte. Es stellte sich heraus, dass ich vergessen hatte, httpd.conf zu ändern und den Pfad vom Standard-PHP-Modul (Version 5.5.27) auf das installierte ( Version 5.6.14). Dies sollte in httpd.conf erfolgen, indem Sie den Standardpfad LoadModule php5_module in LoadModule php5_module /usr/local/opt/php56/libexec/Apache2/libphp5.so ändern. Ich entschied mich einfach, es hier als mögliche Lösung für diejenigen zu belassen, die ihr Betriebssystem oder nur die PHP -Version aktualisieren und das gleiche Problem haben.

2
ievgenii

Ich habe PostgreSQL für Mac heruntergeladen und nach der Installation den Stack Builder verwendet, um den gesamten EnterpriseDB-Apache/PHP-Stack Ende zu Ende aufzustellen. Ich erwähne dies als eine mögliche Zeitersparnisoption, wahrscheinlich nicht für alle Situationen ideal. Sollte funktionieren, wenn der mit Mac OS X gelieferte Apache und die Postgres niemals gestartet wurden. 

Um bestehende, von Apache gehostete Anwendungen (d. H. Die Installation vor der Installation von PostgreSQL) stabil zu halten, würde ich einfach den neueren EnterpriseDB-Apache auf Port 81 installieren (Stackbuilder fragt nach einem neuen Port, wenn bereits eine Apache-Instanz ausgeführt wird). Verwenden Sie anschließend mod_proxy in httpd.conf für den Apache, der auf Port 80 ausgeführt wird, um eine nahtlose Benutzererfahrung für auf PostgreSQL gehostete Anwendungen bereitzustellen. 

0
Net Dawg

Für diejenigen unter Ihnen, die einen openssl-Fehler haben, während make hier die Lösung ist

OSX verwendet openssl 0.98, während das Installationsprogramm nach 1.0.0 sucht

anweisungen finden Sie unter diesem Link

psycopg2 Installationsfehler - Bibliothek wurde nicht geladen: libssl.dylib

0
Majky