Включение поддержки PostgreSQL в PHP на Mac OS X -- php поле с участием macos поле с участием postgresql поле с участием php-extension пол Связанный проблема

Enabling PostgreSQL support in PHP on Mac OS X


31
vote

проблема

русский

У меня ужасно трудно получить команду «pg_connect ()», чтобы правильно работать на моем Mac. В настоящее время я пишу PHP-скрипт (для выполнения от консоли), чтобы прочитать базу данных PostgreSQL и отправить отчет по электронной почте.

Я вошел в мой <код> php.ini файл и добавлен

 <код> extension=pgsql.so   

Но я встречался со следующей ошибкой.

PHP Предупреждение: PHP Startup: невозможно загрузить динамическую библиотеку '/usr/lib/php/extensions/no-debug-non-zts-20090626/php_pgsql.so' - dlopen (/ usr / lib / php / pragensions / NO-DEBUG-NON-ZTS-20090626 / PHP_PGSQL.SO, 9): изображение не найдено в неизвестном на линии 0
PHP FATAL ОШИБКА: вызов неопределенной функции pg_connect () в ... (бла-файл здесь)

При запуске <код> phpinfo() , я ничего не вижу о postgresql, так что же моя проблема здесь?

Английский оригинал

I'm having a terribly difficult time getting the command "pg_connect()" to work properly on my Mac. I'm currently writing a PHP script (to be executed from console) to read a PostgreSQL database and email a report.

I've gone into my php.ini file and added

extension=pgsql.so 

But, I'm met with the following error.

PHP Warning: PHP Startup: Unable to load dynamic library '/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): image not found in Unknown on line 0
PHP Fatal error: Call to undefined function pg_connect() in... (blah file here)

When running phpinfo(), I see nothing about PostgreSQL, so what is my issue here?

</div
           
 
 

Список ответов

73
 
vote
vote
Лучший ответ
 
<Р> 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
  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, удалил <код> curl -O http://us.php.net/distributions/php-5.3.3.tar.gz0 из новых версий XCode поэтому процедура выше будет терпеть неудачу в # 5. Для того, чтобы решить эту проблему:

  1. Введите <код> curl -O http://us.php.net/distributions/php-5.3.3.tar.gz1 .
  2. Введите <код> curl -O http://us.php.net/distributions/php-5.3.3.tar.gz2 .
  3. Введите <код> curl -O http://us.php.net/distributions/php-5.3.3.tar.gz3 .
  4. Введите <код> curl -O http://us.php.net/distributions/php-5.3.3.tar.gz4 .
<Р> Это должно установить <код> curl -O http://us.php.net/distributions/php-5.3.3.tar.gz5 и позволяют установить модуль, используя инструкции выше.
 

The PHP version that comes bundled with OS X doesn't include PostgreSQL. You'll have to compile the extension yourself. Here are some instructions:

  1. Find your version of PHP: php -v.
  2. Download the version of PHP that matches yours: curl -O http://us.php.net/distributions/php-5.3.3.tar.gz. (This example downloads PHP 5.3.3 but this must match your version)
  3. Extract the archive you downloaded: tar -xzvf php-5.3.3.tar.gz
  4. Change to the PostgreSQL's extension directory: cd php-5.3.3/ext/pgsql/
  5. Type phpize.
  6. Type ./configure.
  7. Type make.
  8. Type sudo make install.
  9. Add the extension to you php.ini file by adding extension=pgsql.so. (You may already have done this)
  10. Restart Apache.

Update for OS X Mountain Lion Apple has removed autoconf from the newer versions of XCode so the procedure above will fail at #5. To solve that problem:

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

That should install autoconf and allow you to install the module using the instructions above.

</div
 
 
         
         
36
 
vote

Если вы используете дом <код> curl -O http://us.php.net/distributions/php-5.3.3.tar.gz6 , вы можете решить эту проблему с помощью команды просто:

<Код> curl -O http://us.php.net/distributions/php-5.3.3.tar.gz7

<Р> для другой версии PHP, поиск с:

<Код> curl -O http://us.php.net/distributions/php-5.3.3.tar.gz8

 

If you use home brew, you can solve this with a command as simple as:

brew install php55-pdo-pgsql

for other php version, search with:

brew search pgsql

</div
 
 
     
     
8
 
vote

Это работает для меня с OSX 10.9.4 «<сильный> Mavericks »

Установить источники

<Р> Скачать исходный PHP-код. В отличие от Mountain Lion, вы не получаете никаких заголовков предустановленные в связи с так нужно положить его в / USR / включать / PHP. Маверикс поставляется с PHP 5.4.17, но последний 5.4.x источник из php.net должен сделать:
 <код> curl -O http://us.php.net/distributions/php-5.3.3.tar.gz9  

<сильный> Настройка PHP

 <код> tar -xzvf php-5.3.3.tar.gz0  

<сильный> Построение модуля

<Р> мне нужен модуль Pdo_Pgsql - та же картина должна применяться к любому модулю при условии, что у вас установлены необходимые зависимости:
 <код> tar -xzvf php-5.3.3.tar.gz1  
<Р> В моем случае я имел следующее сообщение об ошибке: <Р> Не удается найти Autoconf. Пожалуйста, проверьте правильность установки AUTOCONF и Переменная $ PHP_AUTOCONF среды. Затем запустите этот сценарий. ОШИБКА: `Phpize» не удалось <Р> Итак, я должен был использовать эту команду:
 <код> tar -xzvf php-5.3.3.tar.gz2  

Тогда:

 <код> tar -xzvf php-5.3.3.tar.gz3  
<Р> После этого я попытался сделать: ./configure <Р>, но у меня была следующая проблема: <Р> проверка pg_config ... не найден настроить: ошибка: Не удается найти libpq-fe.h. Пожалуйста, укажите правильный PostgreSQL путь установки <Р> Итак, решение было указать правильный путь установки PostgreSQL:
 <код> tar -xzvf php-5.3.3.tar.gz4  
<р>, что копии pdo_pgsql.so в / USR / Библиотека / PHP / расширения / нет отлаживать-не-ЗТС-20100525. <Р> Тогда просто добавьте
 <код> tar -xzvf php-5.3.3.tar.gz5  
<Р> Run <код> tar -xzvf php-5.3.3.tar.gz6 , чтобы подтвердить все шло к плану.
 

This worked for me with OSX 10.9.4 «Mavericks»

Install sources

Download the PHP source code. Unlike on Mountain Lion, you don’t get any headers preinstalled to link against so need to put it in /usr/include/php. Mavericks ships with PHP 5.4.17, but the latest 5.4.x source from php.net should do:

tar -jxvf php-5.4.20.tar.bz2 sudo mkdir -p /usr/include sudo mv php-5.4.20 /usr/include/php 

Configure PHP

cd /usr/include/php ./configure --without-iconv sudo cp /etc/php.ini.default /etc/php.ini 

Building a module

I needed the pdo_pgsql module - the same pattern should apply to just about any module assuming you have the necessary dependencies installed:

cd ext/pdo_pgsql 

In my case I had the following error:

Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script. ERROR: `phpize' failed

So I had to use this command:

brew install autoconf 

Then:

phpize 

After that I tried to do: ./configure

but I had the next problem:

checking for pg_config... not found configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path

So the solution was to specify correct PostgreSQL installation path:

./configure --with-pdo-pgsql=/Library/PostgreSQL/9.3/ make sudo make install 

That copies pdo_pgsql.so to /usr/lib/php/extensions/no-debug-non-zts-20100525.

Then simply add

extension=pdo_pgsql.so to /etc/php.ini  

Run php -m to confirm everything went to plan.

</div
 
 
 
 
7
 
vote
<Р> Для тех, кто установил php7 / ngix / Postgres с доморощенным <Р> Вы можете установить модуль PostgreSQL с:
 <код> tar -xzvf php-5.3.3.tar.gz7  
<Р> После этого необходимо перезапустить службу PHP:
 <код> tar -xzvf php-5.3.3.tar.gz8  
 

For those who installed php7/ngix/postgres with homebrew

You can install the PostgreSQL module with:

brew install php70-pdo-pgsql 

After that, you have to restart the php service:

brew services restart php70 
</div
 
 
3
 
vote

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

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

 

OS X El Capitan users can simply upgrade their version of PHP 5.6. This is a one liner that will do that.

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

</div
 
 
3
 
vote

для <код> php56 через brew:

 <код> brew install php56-pdo-pgsql   
 

For php56 via brew:

brew install php56-pdo-pgsql 
</div
 
 
       
       
2
 
vote

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

 <код> /Library/PostgreSQL/9.3   

Учитывая местоположение выше, вы можете ввести это:

 <код> ./configure --with-pgsql=/Library/PostgreSQL/9.3   
 

PostgreSQL by default is installed in a unusual place on MAC OS X:

/Library/PostgreSQL/9.3 

Given the location above you can type this:

./configure --with-pgsql=/Library/PostgreSQL/9.3 
</div
 
 
2
 
vote

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

 

I killed the whole day trying to make it work on El Capitan after I made an upgrade yesterday and it turned out that I forgot to modify httpd.conf and change the path from the default php module (version 5.5.27) to the one I installed (version 5.6.14). This should be done in httpd.conf by modifying your default LoadModule php5_module path to LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so. Just decided to leave it here as the potential solution for those who upgrade their OS or just the PHP version and face the same problem.

</div
 
 
0
 
vote

Для тех из вас есть ошибка OpenSSL, в то время как <код> make вот решение

OSX использует OpenSSL 0,98, а установщик ищет 1.0.0

Ссылка на эту ссылку для инструкций

psycopg2 Ошибка установки - библиотека не загружается: libssl.dylib

 

For those of you having openssl error while make here is the solution

OSX uses openssl 0.98 while installer is searching for 1.0.0

refer this link for instructions

psycopg2 installation error - Library not loaded: libssl.dylib

</div
 
 
0
 
vote

Я скачал PostgreSQL для Mac, и использовал Sack Builder после установки, чтобы остановить весь Enterprededb Apache / PHP Stack-Toin. Я упоминаю это как возможный вариант экономии времени, вероятно, не идеально для всех ситуаций. Следует работать нормально, если Apache и Postgres поставляются с Mac OS X, никогда не начались.

Чтобы сохранить существующие приложения для размещения Apache (I.E. Pre-PostgreSQL УСТАНОВКИ УСТАНОВКИ УСТАНОВКИ APACE), я бы просто установил более новый Enterprededb Apache на порт 81 (StackBuilder пригласил для нового порта, если Exmain avache уже работает). Затем используйте Mod_Proxy в httpd.conf для Apache, работающего на порту 80, чтобы предоставить бесшовные пользовательские приложения, размещенные на PostgreSQL.

 

I downloaded PostgreSQL for Mac, and used the stack builder after installation to standup the entire EnterpriseDB Apache/PHP stack end-to-end. I mention this as a possible time saving option, probably not ideal for all situations. Should work OK if the apache and postgres shipped with Mac OS X were never started.

To keep existing apache hosted applications (i.e. pre-PostgreSQL install legacy) stable, I would just install the newer EnterpriseDB apache on port 81 (stackbuilder will prompt for new port if legacy apache instance is already running). Then, use mod_proxy in httpd.conf for the apache running on port 80 to provide seamless user experience to applications hosted on PostgreSQL.

</div
 
 

Связанный проблема

1  PHP: профилированный код и строгая среда ~ улучшение моего кодирования  ( Php profiling code and strict environment improving my coding ) 
Я хотел бы обновить свою локальную рабочую среду, чтобы быть более строгим, чтобы улучшить мой код. Я знаю, что мой код в порядке, но как с большинством вещей...

0  Почему мой счет на массиве хранится в переменной сессии удваивает?  ( Why does my array count stored in a session variable doubles ) 
У меня есть таблица, которая содержит следующие столбцы .. И я сохранил данные этой таблицы в переменную сеанса <код> $sql = "SELECT * from `basic_info...

1  Yii с расширением загрузки, псевдоним «Bootstrap.widgets.tbnavbar» недействителен. Убедитесь, что он указывает на существующий файл PHP  ( Yii with bootstrap extension alias bootstrap widgets tbnavbar is invalid make ) 
Я пытаюсь использовать Расширение Bootstrap с Yii, но я продолжаю получать Ошибка, упомянутая в заголовке, я дважды проверил мой файл конфигурации, но я не ...

13  Отфильтровать номера в строке в PHP  ( Filter out numbers in a string in php ) 
Предполагая, что у меня есть эти тексты 'x34', '150px', '650dpi', 'E3R4T5' ... Как я могу получить только номера? Я имею в виду, я хочу 34, 150, 650, 345 без ...

0  Файл не загружается в Интернете (офлайн / локальные работы)  ( File not being uploaded online offline local works ) 
Чехол: Загрузка аватаров. Это работает в автономном режиме на моем localhost, но после того, как поместил его онлайн в 000webhost Provider, это больше не рабо...

1  Разбор XML-документа с PHP с использованием петли «Foreach»  ( Parsing xml document with php using foreach loop ) 
Я новичок в php, mysql и xml ... и пытался обернуть голову вокруг классов, объектов, массивов и петель. Я работаю над анализатором, который извлекает данные и...

1  Как мне позвонить сценарий Perl с моим контроллером Symfony2?  ( How do i call a perl script from my symfony2 controller ) 
Я пытаюсь реализовать автоматическую отправку в систему управления информацией из-за моего приложения Symfony2. Кто-то еще написал сценарий Perl для представл...

1  add_menu_page не добавляет никаких страниц в WordPress  ( Add menu page doesnt add any pages in wordpress ) 
Я не могу понять, почему мой код не работает. Я разрабатываю плагин в WordPress, и я хочу иметь страницу на панели администратора. Я попробовал этот код, поло...

0  Вставить арабский с помощью PDO не работает  ( Insert arabic using pdo is not working ) 
Я очень глубоко укорую в этом и посмотрите много вопросов, и это не работает Каждый раз, когда я пытаюсь вставить арабский, он показывает так (?????) <Сильн...

5  Экспорт SVG в PDF в автономном TideSDK WebApp  ( Exporting svg to pdf in a offline tidesdk webapp ) 
У меня есть приложение Offline HTML5 / CSS / JS, построенное с TIDESDK, в котором гистограмма нарисована с HighCharts в качестве SVG «Tag», используя данные, ...

0  Ограничение результатов Flickr API, чтобы избежать дублирования фотографий от пользователя?  ( Limiting a results flickr api to avoid duplicate photos from a user ) 
пытается выводить изображения Flickr из определенного местоположения, не используя ни одного геолокации, но только строка местоположения, но это проблема для ...

1  Транзакции mysql и php  ( Transactions mysql and php ) 
Я запутался ABT работает транзакциями через PHP-скрипт. В моем MySQL AutoCommit устанавливается на 1, Тем не менее, когда я запускаю скрипт ex: mysql_query ...

1  ajax () не отвечает после события keyup  ( Ajax not responding after keyup event ) 
Это проблема jQuery / ajax. JQuery / ajax отвечает на событие keyup с оповещением (LOC), показывающим результат значения, введенного в текстовое поле числа. ...

8  Есть ли лучший способ написания GIT Pre-Commit Compart Coint, чтобы проверить любой файл PHP в фиксации для ошибок разбора?  ( Is there a better way of writing a git pre commit hook to check any php file in ) 
Что я имею до сих пор, это <код> #!/bin/sh php_syntax_check() { retval=0 for i in $(git-diff-index --name-only --cached HEAD -- | grep -e '.php$');...

-1  PHP возвращает неправильную строку в MySQLI подготовленной статусы  ( Php returning wrong row in mysqli prepared statment ) 
Я пытаюсь создать тщеславие URL для моего сайта, и на данный момент есть только одно имя пользователя в базе данных, которые можно ссылаться. Мой запрос верне...

Связанный проблема

1  PHP: профилированный код и строгая среда ~ улучшение моего кодирования 
0  Почему мой счет на массиве хранится в переменной сессии удваивает? 
1  Yii с расширением загрузки, псевдоним «Bootstrap.widgets.tbnavbar» недействителен. Убедитесь, что он указывает на существующий файл PHP 
13  Отфильтровать номера в строке в PHP 
0  Файл не загружается в Интернете (офлайн / локальные работы) 
1  Разбор XML-документа с PHP с использованием петли «Foreach» 
1  Как мне позвонить сценарий Perl с моим контроллером Symfony2? 
1  add_menu_page не добавляет никаких страниц в WordPress 
0  Вставить арабский с помощью PDO не работает 
5  Экспорт SVG в PDF в автономном TideSDK WebApp 
0  Ограничение результатов Flickr API, чтобы избежать дублирования фотографий от пользователя? 
1  Транзакции mysql и php 
1  ajax () не отвечает после события keyup 
8  Есть ли лучший способ написания GIT Pre-Commit Compart Coint, чтобы проверить любой файл PHP в фиксации для ошибок разбора? 
-1  PHP возвращает неправильную строку в MySQLI подготовленной статусы