it-swarm.com.de

Schwerwiegender Fehler: Aufruf der nicht definierten Funktion pg_connect ()

Ich versuche, eine Verbindung zu meiner Datenbank (Remote-Server) herzustellen, in der PostgreSQL installiert ist. Mein PHP - Code versucht, mithilfe von pg_connect () eine Verbindung zur Datenbank herzustellen. Ich erhalte jedoch die Fehlermeldung: - "Schwerwiegender Fehler: Rufen Sie die nicht definierte Funktion pg_connect () in /var/www/website/functions.php auf Zeile 82 ".

Die Linie 82 ist einfach:

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

(alle zuvor definierten Variablen)

Ich habe viele Foren überprüft und die einzige Lösung, die vorgeschlagen wurde, war das Auffinden der Datei php.ini, die eine Zeile enthält: - extension = pgsql.so (für UNIX) und extension = php_pgsql.dll (für Windows). 

Diese Aussage sollte kommentiert werden und die Lösung ist, sie zu kommentieren. Ich habe es ausprobiert, ändert aber nichts an der Situation. Auf dem Remote-Server ist eine höhere Version als PostgreSQL v9.0.4 installiert. Ich habe dann PostgreSQL v8.4.8 auf meinem Laptop installiert und die Website lokal mit MAMP ausgeführt. Zuerst stürzte Apache aus einem ungeraden Grund ab. Ich habe dieses Problem behoben, aber wieder wurde mir derselbe Fehler wie zuvor gemeldet. Fataler Fehler: Aufruf der undefinierten Funktion pg_connect () ....

Ich habe auch die phpinfo() ausgeführt und es hat gezeigt, dass die PHP-Version das PostgreSQL-Modul unterstützt. Ich habe einen ganzen Tag damit verbracht, nach der Lösung zu suchen, war aber nicht erfolgreich. Dies ist mein erstes Projekt, das eine Website entwickelt, und ich bin verrückt. Jede Art von Hilfe wird sehr geschätzt.

phpinfo () gibt mir eine riesige Liste von Dingen am Terminal, aber die für PostgreSQL relevanten Einträge lauten wie folgt: -

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

Ich hatte MAMP nach jeder Bearbeitung neu gestartet, da es in jedem Post, den ich bisher gelesen habe, erwähnt wurde. Ich glaube, dass sowohl Apache als auch PHP zurückgesetzt werden.

'pqsql.so' (das ist das UNIX-Äquivalent von 'php_pqsql.dll' in Windows) ist im 'extension'-Verzeichnis vorhanden. Ich habe auch die Datei 'pqsql.so' in das Verzeichnis Apache/bin kopiert, aber es gab mir keine Änderung.

Ich führe nicht hauptsächlich PHP in der Kommandozeile aus. Ich war nur neugierig, was phpinfo () mich für pgsql relevant machen würde, was ich oben in meiner Antwort erwähnt habe.

Ich arbeite immer noch an den von Ihnen erwähnten Tools und werde antworten, sobald ich Ergebnisse bekomme.

Danke, H

28
hrshd

Sie müssen das Paket php-pgsql oder wie auch immer es für Ihre Plattform aufgerufen wird, installieren. Was ich nicht glaube, du hast es übrigens gesagt.

Unter Ubuntu und 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

oder 

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

;extension=php_pgsql.dll

then
restart Apache 
14
Angelin Nadar

Schwerwiegender Fehler: Aufruf an undefinierte Funktion pg_connect () ...

Ich hatte diesen Fehler bei der Installation von Lampp oder Xampp in Archlinux.

Die Lösung war, die php.ini zu bearbeiten, sie befindet sich in /opt/lampp/etc/php.ini

dann finden Sie diese Linie und unkommentiert

extension = "pgsql.so"

dann den Server Apache mit xampp neu starten und testen ...

Viel Glück

7
davidleosam

Bearbeiten. Ich habe gerade bemerkt, dass Sie MAMP erwähnt haben. Mein Rat ist für Windows, kann aber nützlich sein, wenn Sie wissen, welche entsprechenden Tools verwendet werden sollen.

Dinge zum Ausprobieren:

  • Haben Sie PHP und Apache seit der Bearbeitung der php.ini neu gestartet?

  • Ist die php_pgsql.dll in Ihrem Verzeichnis php\ext gefunden?

  • Laufen Sie PHP als Modul? Wenn dies der Fall ist, kopieren Sie die Datei php_pgsql.dll Im Verzeichnis Apache\bin.

  • Führen Sie PHP von der Befehlszeile aus mit einem Flag aus, das eine Verschiedene php.ini-Datei angibt?

  • Sie könnten versuchen, ein Tool wie Sysinternals 'Filemon zu verwenden, um anzuzeigen, auf welche -Dateien zugegriffen wird, wenn PHP ausgeführt wird.

  • Sie können versuchen, ein Tool wie Dependency Walker zu verwenden, um die Abhängigkeiten für die postgreSQL-DLL zu überprüfen, falls Sie eine fehlende Abhängigkeit haben. Schnelle Suche nach ldd für Unix.

6
JRL
  1. Fügen Sie 'PHPIniDir "C:/php"' in die Datei httpd.conf ein. (Vorgesehen Sie haben Ihre PHP in C: gespeichert, oder geben Sie an, wo PHP gespeichert ist.)
  2. Kommentieren Sie nach 'extension = php_pgsql.dll' in der Datei __. php.ini das Kommentarzeichen
  3. Unkommentiert '; extension_dir = "ext"' in php.inidirectory
5
Chetan

Ich hatte das gleiche Symptom in win7. Ich habe dieses Skript bekommen:

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

Als ich das Skript phpinfo.php über Apache ausführte ( http: //localhost/phpinfo.php ), erhielt ich die Fehlermeldung: Aufruf der undefinierten Funktion pg_connect () in ...

Wenn ich das Skript same von der Befehlszeile (php phpinfo.php) aus ausführte, erhielt ich die erwartete Nachricht: PHP Warnung: pg_connect (): Verbindung zum PostgreSQL-Server nicht möglich : "=" fehlt nach "blah"

In beiden Fällen wurde die erwartete php.ini verwendet:

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

der Abschnitt pgsql fehlte jedoch im Fall der Apache-basierten Ausführung vollständig in phpinfo und war in der Befehlszeilen-basierten Ausführung vorhanden.

Die Lösung war, dass ich die folgende Zeile zu Apache httpd.conf hinzugefügt habe:

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

Es scheint, dass diese Datei aus irgendeinem Grund nicht automatisch geladen wird, wenn Apache das PHP-Skript ausführt, aber es wird geladen, wenn ich das PHP-Skript von der Befehlszeile aus ausführe.

Ich hoffe, es hilft. 

1
Csongor Halmai

Für php 5.4 auf Centos 6.10 fügen wir diese Zeilen in php.ini ein

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

Es klappt.

1
Alf Newman

Ich hatte dieses Problem auch unter OSX. Die Lösung kommentierte den extension = pgsql.so in php.ini.default und löschte das Suffix .default, da die Datei php.ini nicht vorhanden war. 

Wenn Sie XAMPP verwenden, befindet sich die Datei php.ini in/XAMPP/xampfiles/etc

1
user9548

installieren Sie das benötigte Paket ., wenn Sie yum verwenden:

yum search pgsql

dann schauen Sie sich das Ergebnis an und finden Sie alles, was so etwas wie 'php-pgsql' oder so ähnlich ist. kopiere den Namen und dann:

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

Das Kommentieren von extension=php_pgsql.dll in den php.ini-Konfigurationsdateien funktioniert, aber Sie müssen möglicherweise auch Ihren XAMPP-Server neu starten, damit er endlich funktioniert. Ich musste das tun. 

0
Adim Victor

Verwenden Sie unter Gentoo das USE-Flag postgres in /etc/portage/make.conf und rufen Sie emerge "emerge php" auf

0
kemals

Für diejenigen von Ihnen, die dieses Problem mit PHP 5.6 haben, können Sie den folgenden Befehl verwenden:

yum install php56w-pgsql

Um eine Liste mit mehr Paketnamen für PHP 5.6 zu erhalten, öffnen Sie den folgenden Link und blättern Sie zu Paketen:

PHP 5.6 auf CentOS/RHEL 7.0 und 6.6 über Yum

0
SPRBRN

Ich bin auf diesen Fehler gestoßen und es hat sich letztendlich darauf bezogen, wie PHPs extension_dir geladen wurde.

Wenn Sie beim Ausdrucken von phpinfo () feststellen, dass unter dem PDO-Header PDO drivers auf kein Wert gesetzt ist, möchten Sie möglicherweise überprüfen, ob Sie das Erweiterungsverzeichnis erfolgreich laden, wie in diesem Beitrag beschrieben :

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

0
quetzaluz

Die Lösung hat damit zu tun, dass Sie die Datei mit Ihren PHP-Konfigurationen haben. Das heißt, php.ini hat die Erweiterung, die als Vermittler zwischen php und postgres fungiert, durch ein ";" vor der Anweisung "extension = pdo_pgsql"

Schnellkorrektur

  1. Öffnen Sie die Datei php.ini in Ihrem bevorzugten Editor. (Atom ????)
  2. Suchen Sie nach der Zeile "extension = pdo_pgsql" im Abschnitt "Dynamic Extensions". (eine einfache Strg + F) würde Sie schnell dorthin bringen.
  3. Entferne das ";" vor der Zeile "; extension = pdo_pgsql".
  4. Starten Sie Ihren Server neu.
  5. Behebe weitere Fehler wie ein Rockstar. ????
0
Geeky64

Du musst diesen Schritten folgen:

Öffnen Sie die PHP-Konfigurationsdatei, die sich im folgenden Verzeichnis befindet 

C: \ xampp \ php \ php.ini

Suchen Sie in dieser Datei den Erweiterungsabschnitt und entfernen Sie die folgenden Zeilen 

extension = php_pdo_pgsql.dll  
extension = php_pgsql.dll

und starte deinen Apache neu

0