php - pgsql - Error fatal: llamada a la función no definida pg_connect()
ubuntu apache php postgresql (13)
Estoy intentando conectarme a mi base de datos (servidor remoto) que tiene instalado PostgreSQL. Mi código PHP está intentando conectarme a la base de datos usando pg_connect (), pero aparece el error que dice: - "Error fatal: llamada a la función indefinida pg_connect () en /var/www/website/functions.php en la línea 82".
La línea 82 simplemente es:
$db = pg_connect($conn_string);
where $conn_string = "host=".$hostname." port=5432 dbname=".$dbname." user=".$db_user." password=".$db_password.""
(todas las variables definidas anteriormente)
Revisé muchos foros y la única solución sugerida era ubicar el archivo php.ini que contiene una línea: - extension = pgsql.so (para UNIX) y extension = php_pgsql.dll (para Windows).
Se supone que esta afirmación debe comentarse y la solución es descomentarla. Lo he intentado pero aún no cambia la situación. El servidor remoto tiene una versión posterior a la instalación de PostgreSQL v9.0.4. Luego instalé PostgreSQL v8.4.8 en mi computadora portátil y ejecuté el sitio web localmente usando MAMP. Al principio, Apache se bloqueó por alguna razón extraña, solucioné ese problema, pero nuevamente terminé con el mismo error que antes, es decir, error fatal: llamada a la función indefinida pg_connect () ....
También ejecuté el phpinfo()
y demostró que la versión php es compatible con el módulo PostgreSQL. He pasado un día entero buscando la solución pero no he tenido éxito. Este es mi primer proyecto para desarrollar un sitio web y estoy fuera de control. Cualquier tipo de ayuda será muy apreciada.
phpinfo () me da una gran lista de cosas en la terminal, pero las listas relevantes para PostgreSQL son las siguientes:
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
Había reiniciado MAMP después de cada edición que hice desde que se mencionó en cada publicación que he leído hasta ahora. Creo que restablece tanto Apache como php.
''pqsql.so'' (que es el equivalente de UNIX de ''php_pqsql.dll'' en Windows) está presente en el directorio ''extensión''. También copié y pegué el archivo ''pqsql.so'' en el directorio de Apache / bin, pero no me proporcionó ningún cambio.
No estoy ejecutando php en la línea de comandos principalmente. Solo tenía curiosidad por ver qué phpinfo () me daría relevancia para pgsql que he mencionado en mi respuesta anterior.
Todavía estoy trabajando en las herramientas que ha mencionado y responderé tan pronto como obtenga algún resultado.
Gracias, H
- Agregue ''PHPIniDir'' C: / php "''en el archivo httpd.conf. (Siempre que tenga su PHP guardado en C :, o bien proporcione la ubicación donde se guarda PHP).
- Descomente siguiendo ''extension = php_pgsql.dll'' en el archivo php.ini
- Descomentar ''; extension_dir = "ext"'' en el directorio php.ini
En Gentoo, usa USE flag postgres en /etc/portage/make.conf y res emerge "emerge php"
En Windows OS, busque esto en php.ini "php_pgsql.dll" y elimine el ";" en la extensión, entonces eso es todo :) ¡Cheeers!
Error fatal: llamada a la función no definida pg_connect () ...
Tuve este error cuando estaba instalando Lampp o xampp en Archlinux,
La solución fue editar php.ini, está ubicado en /opt/lampp/etc/php.ini
luego encuentra esta línea y descomenta
extension = "pgsql.so"
luego reinicia el servidor apache con xampp y prueba ...
Buena suerte
Me encontré con este error y terminó relacionado con la forma en que se cargaba el archivo extension_dir de PHP.
Si al imprimir phpinfo () encuentra que bajo el encabezado PDO, los controladores PDO se configuran sin valor , es posible que desee comprobar que está cargando correctamente su directorio de extensión como se detalla en esta publicación:
https://.com/a/14786808/2578505
Necesita instalar el paquete php-pgsql o como se llame para su plataforma. Lo cual no creo que hayas dicho por cierto.
En Ubuntu y Debian:
sudo apt-get install php5-pgsql
Para aquellos de ustedes que tienen este problema con PHP 5.6, pueden usar el siguiente comando:
yum install php56w-pgsql
Para obtener una lista de más nombres de paquete para PHP 5.6, abra el siguiente enlace y desplácese hacia abajo a los paquetes:
También tuve este problema en OSX. La solución fue descomentar la extension = pgsql.so
en php.ini.default
y eliminar el sufijo .default
, ya que el archivo php.ini
no estaba allí.
Si está utilizando XAMPP, el archivo php.ini reside en / XAMPP / xampfiles / etc
Tienes que seguir estos pasos:
Abra el archivo de configuración php, que se encuentra en el siguiente directorio
C: / xampp / php / php.ini
Dentro de ese archivo, busque la sección de extensión y elimine las siguientes líneas
extension = php_pdo_pgsql.dll
extension = php_pgsql.dll
y reinicia tu apache
Tuve el mismo síntoma en win7. Tengo este guion:
<?php
phpinfo();
pg_connect("blah");
Cuando ejecuté el script phpinfo.php a través de apache ( http://localhost/phpinfo.php ), recibí el siguiente mensaje de error: Llamada a la función indefinida pg_connect () en ...
Cuando ejecuté el mismo script desde la línea de comando (php phpinfo.php), recibí el mensaje esperado: Advertencia de PHP: pg_connect (): no se pudo conectar al servidor de PostgreSQL: falta "=" después de "blah"
En ambos casos, se utilizó el php.ini esperado:
Loaded Configuration File C:/Program Files (x86)/php/php.ini
pero la sección pgsql faltaba por completo en phpinfo en el caso de la ejecución basada en apache y estaba presente en la ejecución basada en línea de comandos.
La solución fue que agregué la siguiente línea al apache httpd.conf:
LoadFile "C:/Program Files (x86)/php/libpq.dll"
Parece que, por alguna razón, este archivo no se carga automáticamente cuando apache ejecuta el script php, pero se carga si ejecuto el script php desde la línea de comandos.
Espero que ayude.
instala el paquete necesario. si usas yum:
yum search pgsql
luego mira el resultado y encuentra algo parecido a ''php-pgsql'' o algo por el estilo. copia el nombre y luego:
yum install *paste the name of the package here*
Editar . Me di cuenta de que estabas mencionando a MAMP. Mi consejo es para Windows, pero puede ser útil si sabes qué herramientas correspondientes usar.
Cosas para intentar :
¿Ha reiniciado PHP y Apache desde su edición de php.ini?
¿Se encuentra php_pgsql.dll en su directorio php / ext?
¿Estás ejecutando php como un módulo? Si es así, intente copiar el archivo php_pgsql.dll en el directorio Apache / bin.
¿Está ejecutando PHP desde la línea de comandos con un indicador que especifica un archivo php.ini diferente?
Podría intentar usar una herramienta como Filemon de Sysinternals para ver a qué archivos se está intentando acceder cuando se ejecuta PHP.
Podría intentar usar una herramienta como Dependency Walker para ver las dependencias de la DLL de postgreSQL, en caso de que tenga una dependencia faltante. La búsqueda rápida ldd para Unix.
Easy install for ubuntu:
Just run,
> sudo apt-get install php5-pgsql
then
> sudo service apache2 restart //restart apache
o
Uncomment the following in php.ini by removing the ";"
;extension=php_pgsql.dll
then
restart apache