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

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

Мне очень сложно получить команду "pg_connect()" для правильной работы на моем Mac. В настоящее время я пишу PHP script (для запуска из консоли), чтобы прочитать базу данных 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 on line 0
PHP Неустранимая ошибка: вызов функции undefined pg_connect() в... (файл blah здесь)

При запуске phpinfo() я ничего не вижу о PostgreSQL, поэтому в чем моя проблема?

4b9b3361

Ответ 1

Версия PHP, поставляемая в комплекте с OS X, не включает PostgreSQL. Вам придется скомпилировать расширение самостоятельно. Вот несколько инструкций:

  • Найдите свою версию PHP: php -v.
  • Загрузите версию PHP, которая соответствует вашим: 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
  • Перейдите в каталог расширения PostgreSQL: cd php-5.3.3/ext/pgsql/
  • Введите phpize.
  • Введите ./configure.
  • Введите make.
  • Введите sudo make install.
  • Добавьте расширение к вам php.ini, добавив extension=pgsql.so. (Возможно, вы уже это сделали)
  • Перезапустите Apache.

Обновление для 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 и позволить вам установить модуль, используя приведенные выше инструкции.

Ответ 2

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

brew install php55-pdo-pgsql

для другой версии php, выполните поиск с помощью

brew search pgsql

Ответ 3

Это сработало для меня с 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. Затем запустите этот script. ОШИБКА: `phpize 'failed

Поэтому мне пришлось использовать эту команду:

brew install autoconf

Тогда:

phpize

После этого я попытался сделать: . /configure

но у меня была следующая проблема:

проверка на pg_config... не найден configure: ошибка: не удается найти 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, чтобы подтвердить, что все идет по плану.

Ответ 4

Для тех, кто установил php7/ngix/postgres с homebrew

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

brew install php70-pdo-pgsql

После этого вам необходимо перезапустить службу php:

brew services restart php70

Ответ 5

Я убил весь день, пытаясь заставить его работать над 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 и сталкивается с той же проблемой.

Ответ 6

Пользователи OS X El Capitan могут просто обновить свою версию PHP 5.6. Это один лайнер, который сделает это.

curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6

Ответ 7

Для php56 через brew:

brew install php56-pdo-pgsql

Ответ 8

PostgreSQL по умолчанию установлен в необычном месте на MAC OS X:

/Library/PostgreSQL/9.3

Учитывая указанное выше местоположение, вы можете ввести следующее:

./configure --with-pgsql=/Library/PostgreSQL/9.3

Ответ 10

Я загрузил PostgreSQL для Mac и использовал конструктор стека после установки, чтобы выдержать весь пакет EnterpriseDB Apache/PHP из конца в конец. Я упоминаю это как возможный вариант экономии времени, возможно, не идеальный для всех ситуаций. Должен работать нормально, если apache и postgres, поставляемые с Mac OS X, никогда не запускались.

Чтобы сохранить существующие поддерживаемые Apache приложения (например, pre-PostgreSQL установить устаревшие), я бы просто установил новый Apache EnterpriseDB на порт 81 (stackbuilder предложит новый порт, если уже установлен предыдущий экземпляр apache). Затем используйте mod_proxy в httpd.conf для apache, запущенного на порту 80, чтобы обеспечить бесшовную работу пользователей для приложений, размещенных на PostgreSQL.