Мне очень сложно получить команду «pg_connect ()» для правильной работы на моем Mac. В настоящее время я пишу скрипт PHP (который должен выполняться с консоли), чтобы прочитать базу данных PostgreSQL и отправить отчет по электронной почте.
Я зашел в файл php.ini
и добавил
extension=pgsql.so
Но меня встретила следующая ошибка.
PHP Предупреждение: запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib/php/extensions/no-debug-non-zts-20090626/php_pgsql.so' – dlopen (/ usr / lib / php / extensions / no-debug -non-zts-20090626 / php_pgsql.so, 9): изображение не найдено в Unknown в строке 0
PHP Неустранимая ошибка: вызов неопределенной функции pg_connect () в … (файл blah здесь)
При запуске phpinfo()
я ничего не вижу о PostgreSQL, так что в чем проблема?
Версия PHP, поставляемая в комплекте с OS X, не включает PostgreSQL. Вам придется скомпилировать расширение самостоятельно. Вот несколько инструкций:
php -v
. curl -O http://us.php.net/distributions/php-5.3.3.tar.gz
. (В этом примере загружается PHP 5.3.3, но это должно соответствовать вашей версии) tar -xzvf php-5.3.3.tar.gz
в архив: tar -xzvf php-5.3.3.tar.gz
cd php-5.3.3/ext/pgsql/
phpize
. ./configure
. make
. sudo make install
. php.ini
, добавив extension=pgsql.so
. (Возможно, вы уже это сделали) Обновление для OS X Mountain Lion Apple удалило autoconf
из более новых версий XCode, поэтому описанная выше процедура завершится неудачей на # 5. Чтобы решить эту проблему:
/usr/bin/ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"
. sudo chown -R $USER /usr/local/Cellar
. brew update
. brew install autoconf
. Это должно установить autoconf
и позволить вам установить модуль, используя приведенные выше инструкции.
Если вы используете домашнее brew
, вы можете решить это с помощью команды так же просто, как:
brew install php55-pdo-pgsql
для другой версии php выполните поиск по:
brew search pgsql
Источники установки
Загрузите исходный код PHP. В отличие от Mountain Lion, вы не получаете никаких заголовков, предварительно установленных для ссылки, поэтому вам нужно поместить их в / usr / include / php. Mavericks поставляется с PHP 5.4.17, но последний источник 5.4.x от php.net должен делать:
tar -jxvf php-5.4.20.tar.bz2 sudo mkdir -p /usr/include sudo mv php-5.4.20 /usr/include/php
Настройка PHP
cd /usr/include/php ./configure --without-iconv sudo cp /etc/php.ini.default /etc/php.ini
Создание модуля
Мне нужен модуль pdo_pgsql – тот же шаблон должен применяться практически к любому модулю при условии, что у вас установлены необходимые зависимости:
cd ext/pdo_pgsql
В моем случае у меня была следующая ошибка:
Не удается найти autoconf. Проверьте установку autoconf и переменную среды $ PHP_AUTOCONF. Затем перезапустите этот скрипт. ОШИБКА: ошибка «phpize»
Поэтому мне пришлось использовать эту команду:
brew install autoconf
Затем:
phpize
После этого я попытался сделать: ./configure
но у меня была следующая проблема:
проверка на pg_config … не найден configure: error: Не удается найти libpq-fe.h. Укажите правильный путь установки PostgreSQL.
Таким образом, решение заключалось в том, чтобы указать правильный путь установки PostgreSQL:
./configure --with-pdo-pgsql=/Library/PostgreSQL/9.3/ make sudo make install
Это копирует pdo_pgsql.so в / usr / lib / php / extensions / no-debug-non-zts-20100525.
Затем просто добавьте
extension=pdo_pgsql.so to /etc/php.ini
Запустите php -m
чтобы подтвердить, что все идет по плану.
Для тех, кто установил php7 / ngix / postgres с homebrew
Вы можете установить модуль PostgreSQL с помощью:
brew install php70-pdo-pgsql
После этого вам необходимо перезапустить службу php:
brew services restart php70
Я убил весь день, пытаясь заставить его работать над El Capitan после того, как я сделал обновление вчера, и оказалось, что я забыл изменить httpd.conf
и изменить путь от модуля php по умолчанию (версия 5.5.27) к тому, который я (версия 5.6.14). Это нужно сделать в httpd.conf
, изменив свой путь по умолчанию по умолчанию для LoadModule php5_module
для LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so
. Просто решил оставить его здесь как потенциальное решение для тех, кто обновляет свою ОС или только версию PHP и сталкивается с той же проблемой.
Пользователи OS X El Capitan могут просто обновить свою версию PHP 5.6. Это один лайнер, который сделает это.
curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6
Для php56
помощью варева:
brew install php56-pdo-pgsql
PostgreSQL по умолчанию установлен в необычном месте на MAC OS X:
/Library/PostgreSQL/9.3
С учетом местоположения выше вы можете ввести следующее:
./configure --with-pgsql=/Library/PostgreSQL/9.3
Для тех, у кого есть ошибка openssl, в то время как make
здесь – это решение
OSX использует openssl 0.98, в то время как установщик ищет 1.0.0
обратитесь к этой ссылке для получения инструкций
Ошибка установки psycopg2 – Библиотека не загружена: libssl.dylib
Я загрузил PostgreSQL для Mac и использовал конструктор стека после установки, чтобы выдержать весь пакет EnterpriseDB Apache / PHP из конца в конец. Я упоминаю это как возможный вариант экономии времени, возможно, не идеальный для всех ситуаций. Должен работать нормально, если apache и postgres, поставляемые с Mac OS X, никогда не запускались.
Чтобы сохранить существующие приложения, поддерживающие apache (например, pre-PostgreSQL install legacy), я бы просто установил новый Apache EnterpriseDB на порт 81 (stackbuilder запросит новый порт, если уже установлен предыдущий экземпляр apache). Затем используйте mod_proxy в httpd.conf для apache, запущенного на порту 80, чтобы обеспечить бесшовную работу пользователей для приложений, размещенных на PostgreSQL.