Включение поддержки 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, поэтому в чем моя проблема?
Ответы
Ответ 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
Ответ 9
Для тех из вас, у кого есть ошибка openssl, а make
вот решение
OSX использует openssl 0.98, в то время как установщик ищет 1.0.0
ссылайтесь на эту ссылку для инструкций
Ошибка установки psycopg2 - Библиотека не загружена: libssl.dylib
Ответ 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.