Неустранимая ошибка: вызов неопределенной функции pg_connect () - PullRequest
31 голосов
/ 16 сентября 2011

Я пытаюсь подключиться к моей базе данных (удаленному серверу), на которой установлен PostgreSQL.Мой PHP-код пытается подключиться к базе данных с помощью pg_connect (), но я получаю сообщение об ошибке: - «Неустранимая ошибка: вызов неопределенной функции pg_connect () в /var/www/website/functions.php в строке 82».

Строка 82 просто такова:

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

(все переменные, определенные ранее)

Я проверил много форумов, и единственным предложенным решением было найти файл php.ini, которыйсодержит строку: - extension = pgsql.so (для UNIX) и extension = php_pgsql.dll (для Windows).

Предполагается, что это утверждение будет прокомментировано, и решение состоит в том, чтобы раскомментировать его.Я пробовал это, но все еще не меняет ситуацию.Удаленный сервер имеет версию, более позднюю, чем установленная PostgreSQL v9.0.4.Затем я установил PostgreSQL v8.4.8 на свой ноутбук и запустил сайт локально, используя MAMP.Сначала Apache потерпел крах по какой-то странной причине, я исправил эту проблему, но снова у меня возникла та же ошибка, что и раньше, т.е. фатальная ошибка: вызов неопределенной функции pg_connect () ....

Я также запустилphpinfo() и это показало, что версия php поддерживает модуль PostgreSQL. Я потратил целый день на поиск решения, но безуспешно.Это мой первый проект по разработке веб-сайта, и я сошел с ума.Любая помощь будет высоко оценена.

phpinfo () дает мне огромный список вещей в терминале, но списки, относящиеся к PostgreSQL, выглядят следующим образом: -

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

Я перезапустилMAMP после каждого редактирования, которое я сделал, так как оно упоминалось в каждом посте, который я прочитал до сих пор.Я считаю, что сбрасывает Apache и php.

'pqsql.so' (который в UNIX эквивалентен 'php_pqsql.dll' в Windows) присутствует в каталоге 'extension'.Я также скопировал и вставил файл pqsql.so в каталог Apache / bin, но он не дал мне никаких изменений.

Я не запускаю php в командной строке.Мне просто было любопытно посмотреть, что phpinfo () даст мне отношение к pgsql, о котором я упоминал в своем ответе выше.

Я все еще работаю над инструментами, которые вы упомянули, и отвечу, как только получуРезультаты.

Спасибо, H

Ответы [ 15 ]

45 голосов
/ 18 сентября 2011

Вам необходимо установить пакет php-pgsql или что-то еще, что называется для вашей платформы.Что я не думаю, что вы, кстати, сказали.

В Ubuntu и Debian:

sudo apt-get install php5-pgsql
14 голосов
/ 27 ноября 2012
Easy install for ubuntu:

Just run,
> sudo apt-get install php5-pgsql
 then
> sudo service apache2 restart //restart apache

или

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

;extension=php_pgsql.dll

then
restart apache 
7 голосов
/ 16 октября 2016

Фатальная ошибка: вызов неопределенной функции pg_connect () ...

У меня была эта ошибка при установке Lampp или xampp в Archlinux,

Решением было отредактировать php.ini, он находится в /opt/lampp/etc/php.ini

затем найдите эту строку и раскомментируйте

расширение = "pgsql.so"

затем перезапустите сервер apache с помощью xampp и протестируйте ...

Удачи

6 голосов
/ 16 сентября 2011

Редактировать . Я только заметил, что вы упомянули MAMP. Мой совет для Windows, но может быть полезен, если вы знаете, какие соответствующие инструменты использовать.

Что попробовать :

  • Вы перезапустили PHP и Apache с момента редактирования php.ini?

  • Найден ли php_pgsql.dll в вашем каталоге php \ ext?

  • Вы используете php как модуль? Если это так, попробуйте скопировать php_pgsql.dll файл в каталоге Apache \ bin.

  • Вы запускаете PHP из командной строки с флагом, указывающим другой файл php.ini?

  • Вы можете попробовать использовать такой инструмент, как Filemon от Sysinternals, чтобы посмотреть, что файлы пытаются получить доступ при работе PHP.

  • Вы можете попробовать использовать инструмент, такой как Dependency Walker, для просмотра зависимостей для DLL-библиотеки postgreSQL, в случае, если у вас отсутствует зависимость. Быстрый поиск вызвал ldd для Unix.

5 голосов
/ 13 марта 2015
  1. Добавьте 'PHPIniDir "C: / php"' в файл httpd.conf. (Предоставляется Вы сохранили свой PHP в C: или укажите место, где PHP сохраняется.)
  2. Раскомментируйте после 'extension = php_pgsql.dll' в Файл php.ini
  3. Раскомментировать '; extension_dir = "ext"' в php.ini каталог
2 голосов
/ 17 ноября 2015

У меня был такой же симптом в win7.Я получил этот скрипт:

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

Когда я выполнил скрипт phpinfo.php через apache (http://localhost/phpinfo.php), я получил сообщение об ошибке: Вызов неопределенной функции pg_connect () in...

Когда я выполнил такой же сценарий из командной строки (php phpinfo.php), я получил ожидаемое сообщение: PHP Предупреждение: pg_connect (): Unableдля подключения к серверу PostgreSQL: отсутствует "=" после "бла"

В обоих случаях использовался ожидаемый php.ini:

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

, но раздел pgsql полностью отсутствовализ phpinfo в случае выполнения на основе Apache, и он присутствовал в выполнении на основе командной строки.

Решение состояло в том, что я добавил следующую строку в httpd.conf apache:

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

По какой-то причине этот файл не загружается автоматически, когда apache запускает скрипт php, но загружается, если я запускаю скрипт php из командной строки.

Надеюсь, это поможет.

1 голос
/ 02 сентября 2018

Для php 5.4 на Centos 6.10 мы включаем эти строки в php.ini

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

Это работает.

1 голос
/ 24 октября 2014

У меня тоже была эта проблема на OSX.Решением было раскомментировать extension = pgsql.so в php.ini.default и удалить суффикс .default, поскольку файла php.ini там не было.

Если вы используете XAMPP, файл php.ini находится в / XAMPP / xampfiles / etc

0 голосов
/ 28 октября 2018

Раскомментирование extension=php_pgsql.dll в файлах конфигурации php.ini работает, но вам, возможно, придется также перезапустить сервер XAMPP, чтобы, наконец, заставить его работать. Я должен был сделать это.

0 голосов
/ 06 мая 2018

Вы должны выполнить следующие действия:

Откройте файл конфигурации php, который находится в следующем каталоге

C: \ xampp \ php \ php.ini

В этом файле найдите раздел расширения и раскомментируйте следующие строки

extension = php_pdo_pgsql.dll  
extension = php_pgsql.dll

и перезагрузите апач

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...