Включение поддержки PostgreSQL в PHP на Mac OS X

Мне очень сложно получить команду «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. Вам придется скомпилировать расширение самостоятельно. Вот несколько инструкций:

  1. Найдите свою версию PHP: php -v .
  2. Загрузите версию PHP, которая соответствует вашим: curl -O http://us.php.net/distributions/php-5.3.3.tar.gz . (В этом примере загружается PHP 5.3.3, но это должно соответствовать вашей версии)
  3. Вы tar -xzvf php-5.3.3.tar.gz в архив: tar -xzvf php-5.3.3.tar.gz
  4. Перейдите в каталог расширений PostgreSQL: cd php-5.3.3/ext/pgsql/
  5. Введите phpize .
  6. Введите ./configure .
  7. Тип make .
  8. Введите sudo make install .
  9. Добавьте расширение к вам в файл php.ini , добавив extension=pgsql.so . (Возможно, вы уже это сделали)
  10. Перезапустите Apache.

Обновление для OS X Mountain Lion Apple удалило autoconf из более новых версий XCode, поэтому описанная выше процедура завершится неудачей на # 5. Чтобы решить эту проблему:

  1. Введите /usr/bin/ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)" .
  2. Тип sudo chown -R $USER /usr/local/Cellar .
  3. Введите brew update .
  4. Тип brew install autoconf .

Это должно установить autoconf и позволить вам установить модуль, используя приведенные выше инструкции.

Если вы используете домашнее brew , вы можете решить это с помощью команды так же просто, как:

brew install php55-pdo-pgsql

для другой версии php выполните поиск по:

brew search pgsql

Это сработало для меня с OSX 10.9.4 « Mavericks »

Источники установки

Загрузите исходный код 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.