Ответ 1
Вам нужно установить пакет php-pgsql или все, что он назвал для вашей платформы. Что я не думаю, что вы сказали, кстати.
В Ubuntu и Debian:
sudo apt-get install php5-pgsql
Я пытаюсь подключиться к моей базе данных (удаленному серверу), в которой установлен 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, о котором я упомянул в своем ответе выше.
Я все еще работаю над упомянутыми вами инструментами и буду отвечать, как только получаю какие-либо результаты.
Спасибо, Н
Вам нужно установить пакет php-pgsql или все, что он назвал для вашей платформы. Что я не думаю, что вы сказали, кстати.
В Ubuntu и Debian:
sudo apt-get install php5-pgsql
Простая установка для Ubuntu:
Просто беги:
sudo apt-get install php5-pgsql
затем
sudo service apache2 restart //restart apache
или
Раскомментируйте следующее в php.ini, удалив ;
;extension=php_pgsql.dll
затем перезапустите apache
Неустранимая ошибка: вызов неопределенной функции pg_connect()...
У меня была эта ошибка, когда я устанавливал Lampp или xampp в Archlinux,
Решением было отредактировать php.ini, он находится в /opt/lampp/etc/php.ini
затем найдите эту строку и раскомментируйте
extension="pgsql.so"
затем перезапустите сервер apache с помощью xampp и протестируйте...
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.
У меня был тот же симптом в 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 скрипт из командной строки.
Надеюсь, это поможет.
У меня также была проблема с OSX. Решение раскомментировало extension = pgsql.so
в php.ini.default
и удалило суффикс .default
, так как файла php.ini
не было.
Если вы используете XAMPP, файл php.ini находится в/XAMPP/xampfiles/etc
Для 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
Оно работает.
Я столкнулся с этой ошибкой и в итоге оказался связан с тем, как загружался PHP extension_dir.
Если при печати phpinfo() вы обнаружите, что в заголовке PDO PDO-драйверах установлено значение no, вам может потребоваться проверить, что вы успешно загрузили свой каталог расширений, как указано в этом сообщении
В Gentoo используйте postgres флаг USE в файле /etc/portage/make.conf и re emerge "emerge php"
Для тех из вас, у кого есть эта проблема с PHP 5.6, вы можете использовать следующую команду:
yum install php56w-pgsql
Для получения списка дополнительных имен пакетов для PHP 5.6 откройте следующую ссылку и прокрутите вниз до пакетов:
установите необходимый пакет. если вы используете yum:
yum search pgsql
тогда посмотрите на результат и найдите что-нибудь вроде "php-pgsql" или что-то в этом роде. скопируйте имя и затем:
yum install *paste the name of the package here*
Вы должны выполнить следующие шаги:
Откройте файл конфигурации php, который находится в следующем каталоге
C: \ xampp \ php \ php.ini
В этом файле найдите раздел расширения и раскомментируйте следующие строки
extension = php_pdo_pgsql.dll
extension = php_pgsql.dll
и перезапустите свой Apache
Раскомментированное extension=php_pgsql.dll
в файлах конфигурации php.ini
работает, но вам, возможно, придется также перезапустить сервер XAMPP, чтобы, наконец, заставить его работать. Я должен был сделать это.
введите описание изображения здесь Посмотрите на изображение, чтобы устранить ошибку: Неустранимая ошибка: вызов неопределенной функции pg_connect()
Решение связано с тем, что ваш файл содержит ваши php-конфигурации. То есть php.ini раскомментировал расширение, отвечающее за роль посредника между php и postgres, поместив ";" перед оператором "extension = pdo_pgsql"
Быстрое исправление
В ОС Windows найдите это в php.ini "php_pgsql.dll" и удалите ";" в расширении тогда, что это:) Приветствую!