在Mac OS X上启用PHP中的PostgreSQL支持

时间:2011-07-05 19:59:23

标签: php macos postgresql php-extension

我很难让命令“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):在第0行的Unknown中找不到图像

  PHP致命错误:在...中调用未定义的函数pg_connect()(此处为blah文件)

运行phpinfo()时,我对PostgreSQL一无所知,那么我的问题是什么?

9 个答案:

答案 0 :(得分:71)

与OS X捆绑在一起的PHP版本不包括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。
  11. OS X Mountain Lion的更新 Apple已从较新版本的XCode中删除autoconf,因此上述过程将在#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
    5. 应该安装autoconf并允许您使用上述说明安装模块。

答案 1 :(得分:36)

如果您使用home brew,您可以使用以下命令解决此问题:

brew install php55-pdo-pgsql

对于其他php版本,请搜索:

brew search pgsql

答案 2 :(得分:8)

这对我来说对OSX 10.9.4«小牛队»

安装资源

下载PHP源代码。与Mountain Lion不同,您没有预先安装任何标题链接,因此需要将它放在/ usr / include / php中。小牛队使用PHP 5.4.17,但来自php.net的最新5.4.x源代码应该:

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确认一切按计划进行。

答案 3 :(得分:3)

OS X El Capitan用户可以简单地升级他们的PHP 5.6版本。这是一个可以做到这一点的单线。

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

答案 4 :(得分:3)

对于php56来自brew:

brew install php56-pdo-pgsql

答案 5 :(得分:2)

默认情况下,PostgreSQL安装在MAC OS X上的一个不寻常的位置:

/Library/PostgreSQL/9.3

根据上面的位置,您可以输入:

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

答案 6 :(得分:2)

昨天我升级后试图让它在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版本并面临同样问题的人的潜在解决方案。

答案 7 :(得分:0)

对于那些有openssl错误的人,make这里是解决方案

当安装程序正在搜索1.0.0时,OSX使用openssl 0.98

请参阅此链接以获取说明

psycopg2 installation error - Library not loaded: libssl.dylib

答案 8 :(得分:0)

我下载了PostgreSQL for Mac,并在安装后使用堆栈构建器端到端地整个EnterpriseDB Apache / PHP堆栈。我提到这是一个可能的省时选项,可能并不适合所有情况。如果Mac OS X附带的apache和postgres从未启动过,那么应该可以正常工作。

为了保持现有的apache托管应用程序(即pre-PostgreSQL安装遗产)稳定,我只需在端口81上安装较新的EnterpriseDB apache(如果旧的apache实例已经运行,stackbuilder将提示新端口)。然后,在httpd.conf中使用mod_proxy,在端口80上运行apache,为PostgreSQL上托管的应用程序提供无缝的用户体验。