Подтвердить что ты не робот

Неустранимая ошибка: вызов функции undefined pg_connect()

Я пытаюсь подключиться к моей базе данных (удаленному серверу), в которой установлен PostgreSQL. Мой PHP-код пытается подключиться к базе данных с помощью pg_connect(), но я получаю сообщение об ошибке: "Неустранимая ошибка: вызов функции undefined 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 разбился по какой-то нечетной причине, я исправил эту проблему, но снова я оказался с той же ошибкой, что и до i.e. Неустранимая ошибка: вызов функции undefined 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, о котором я упомянул в своем ответе выше.

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

Спасибо, Н

4b9b3361

Ответ 1

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

В Ubuntu и Debian:

sudo apt-get install php5-pgsql

Ответ 2

Простая установка для Ubuntu:

Просто беги:

sudo apt-get install php5-pgsql

затем

sudo service apache2 restart //restart apache

или

Раскомментируйте следующее в php.ini, удалив ;

;extension=php_pgsql.dll

затем перезапустите apache

Ответ 3

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

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

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

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

extension="pgsql.so"

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

Ответ 4

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

Что нужно попробовать:

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

  • Является ли php_pgsql.dll в вашем каталоге php\ext?

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

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

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

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

Ответ 5

  • Добавить 'PHPIniDir' C:/php "в файл httpd.conf. (предоставляется у вас есть ваш PHP, сохраненный в C:, или иначе укажите место, где PHP сохраняется.)
  • Раскомментировать следующий 'extension = php_pgsql.dll' в Файл php.ini
  • Uncomment '; extension_dir = "ext" ' в php.ini каталог

Ответ 6

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

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

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

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

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

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

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

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

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

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

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

Ответ 7

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

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

Ответ 8

Для 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

Оно работает.

Ответ 9

Я столкнулся с этой ошибкой и в итоге оказался связан с тем, как загружался PHP extension_dir.

Если при печати phpinfo() вы обнаружите, что в заголовке PDO PDO-драйверах установлено значение no, вам может потребоваться проверить, что вы успешно загрузили свой каталог расширений, как указано в этом сообщении

fooobar.com/questions/199323/...

Ответ 10

В Gentoo используйте postgres флаг USE в файле /etc/portage/make.conf и re emerge "emerge php"

Ответ 11

Для тех из вас, у кого есть эта проблема с PHP 5.6, вы можете использовать следующую команду:

yum install php56w-pgsql

Для получения списка дополнительных имен пакетов для PHP 5.6 откройте следующую ссылку и прокрутите вниз до пакетов:

PHP 5.6 на CentOS/RHEL 7.0 и 6.6 через Yum

Ответ 12

установите необходимый пакет. если вы используете yum:

yum search pgsql

тогда посмотрите на результат и найдите что-нибудь вроде "php-pgsql" или что-то в этом роде. скопируйте имя и затем:

yum install *paste the name of the package here*

Ответ 13

Вы должны выполнить следующие шаги:

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

C: \ xampp \ php \ php.ini

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

extension = php_pdo_pgsql.dll  
extension = php_pgsql.dll

и перезапустите свой Apache

Ответ 14

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

Ответ 16

Решение связано с тем, что ваш файл содержит ваши php-конфигурации. То есть php.ini раскомментировал расширение, отвечающее за роль посредника между php и postgres, поместив ";" перед оператором "extension = pdo_pgsql"

Быстрое исправление

  1. Откройте файл php.ini в вашем любимом редакторе. (атом 🙌)
  2. Найдите строку "extension = pdo_pgsql", которая находится в разделе "Динамические расширения". (простой Ctrl + F) поможет вам быстро.
  3. Удалить ";" перед строкой "; extension = pdo_pgsql".
  4. Перезагрузите сервер.
  5. Иди исправляй больше ошибок, как рок-звезда. 👍

Ответ 17

В ОС Windows найдите это в php.ini "php_pgsql.dll" и удалите ";" в расширении тогда, что это:) Приветствую!