Я пытаюсь подключиться к моей базе данных (удаленный сервер), в которой установлен 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 разбился по какой-то нечетной причине, я исправил эту проблему, но опять-таки я оказался с той же ошибкой, что и раньше. Fatal error: Call to undefined function 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
Вам нужно установить пакет php-pgsql или все, что он вызывает для вашей платформы. Который я не думаю, что вы сказали кстати.
На Ubuntu и Debian:
sudo apt-get install php5-pgsql
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
Изменить . Я просто заметил, что вы упоминаете МАМП. Мой совет для 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.
Неустранимая ошибка: вызов неопределенной функции pg_connect () …
У меня была эта ошибка, когда я устанавливал Lampp или xampp в Archlinux,
Решение было отредактировано php.ini, оно расположено в /opt/lampp/etc/php.ini
затем найдите эту строку и раскомментируйте
расширение = "pgsql.so"
затем перезапустите сервер apache с помощью xampp и проверьте …
Удачи
У меня также была проблема с OSX. Решение было раскомментировано extension = pgsql.so
в php.ini.default
и удаление суффикса .default
, так как файла php.ini
не было.
Если вы используете XAMPP, файл php.ini находится в / XAMPP / xampfiles / etc.
У меня был тот же симптом в win7. Я получил этот скрипт:
<?php phpinfo(); pg_connect("blah");
Когда я выполнил скрипт phpinfo.php через apache ( http: //localhost/phpinfo.php ), я получил сообщение об ошибке: Позвоните в неопределенную функцию pg_connect () в …
Когда я выполнил тот же скрипт из командной строки (php phpinfo.php), я получил ожидаемое сообщение: PHP Warning: 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, но он загружается, если я запускаю php-скрипт из командной строки.
Я надеюсь, что это помогает.
Я столкнулся с этой ошибкой, и в итоге это связано с тем, как загружается PHP extension_dir.
Если после печати phpinfo () вы обнаружите, что в PDO-заголовке PDO-драйверу установлено значение «нет» , вы можете проверить, что вы успешно загрузили свой каталог расширений, как описано в этом сообщении:
В Gentoo используйте postgres флага USE в файле /etc/portage/make.conf и re emerge "emerge php"
Для тех из вас, у кого есть эта проблема с PHP 5.6, вы можете использовать следующую команду:
yum install php56w-pgsql
Чтобы получить список имен пакетов для PHP 5.6, откройте следующую ссылку и прокрутите вниз до пакетов:
PHP 5.6 на CentOS / RHEL 7.0 и 6.6 через Yum
установите необходимый пакет. если вы используете yum:
yum search pgsql
затем посмотрите на результат и найдите что-нибудь вроде «php-pgsql» или что-то в этом роде. скопируйте имя и затем:
yum install *paste the name of the package here*
В ОС Windows найдите это в php.ini «php_pgsql.dll» и удалите «;» в расширении, то вот и все 🙂 Cheeers!