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

33

我在我的Mac上很难让"pg_connect()"命令正常工作。我正在编写一个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行找不到图像
PHP致命错误:调用未定义的函数pg_connect() in...(这里是文件名)

当运行phpinfo()时,我没有看到有关PostgreSQL的任何信息,那么我的问题是什么?


你安装了正确的驱动程序吗? - Dvid Silva
10个回答

72

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. 通过添加extension=pgsql.so将扩展添加到您的php.ini文件中。(您可能已经执行了此操作)
  10. 重启Apache。

适用于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

这将安装autoconf并允许您使用上述说明安装模块。


5
感谢提供步骤,但是不幸的是,我在第六步遇到了问题。出现以下错误:configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path - Jordan Scales
7
修正:只需要在配置语句的末尾指定--with-pgsql=/opt/local/lib/postgresql83/。另外,我添加了pgsql.so而不是pcntl.so。感谢您的帮助! - Jordan Scales
5
它正在"/usr"、"/usr/local"和"/usr/local/pgsql"中查找文件。如果PostgreSQL在系统的其他位置安装,您需要将./configure更改为./configure --with-pgsql=/path/to/pgsql - Francois Deschenes
3
我正在使用Mavericks操作系统,但这可能适用于其他版本。我的php.ini文件不存在,取而代之的是一个名为php.ini.default的文件。这个文件不会被php自动识别,所以我执行了命令 'sudo cp /etc/php.ini.default /etc/php.ini' 并重新启动了Apache服务器(使用 'sudo /usr/sbin/apachectl restart')。 - CenterOrbit
1
我正在使用Yosemite...这里出了大麻烦!!!这个本来是完美的,但只有在我通过终端命令xcode-select --install安装XCODE命令行工具之后才能正常运行。所以,首先重新安装-select,然后按照这篇文章的说明进行操作。 - Hiro Ferreira
显示剩余5条评论

36

如果您使用homebrew,您可以使用以下简单命令解决这个问题:

brew install php55-pdo-pgsql

对于其他版本的php,请使用以下命令搜索:

brew search pgsql


2
这是更好的答案(+1)。目前被接受的答案建议使用brew安装autoconf,然后从源代码编译PHP。这是不必要的工作,因为您可以直接使用brew为Mac OSX安装PostgreSQL、PHP和phpXX-pdo-pgsql包。 - Alexander Farber
我尝试了这个,安装成功了(在 php -i 中看到了 pdo_pgsql),但我仍然收到 pg_connect() not found 的错误提示。 - Nic Cottrell
1
实际上,这是一个更好的答案。因为几乎所有的开发者现在都使用某种形式的包管理器。 - Turdaliev Nursultan

8

这对我在OSX 10.9.4“Mavericks”上有效

安装源码

下载PHP源代码。与Mountain Lion不同,您没有任何预安装的头文件可以链接,因此需要将其放在/usr/include/php中。 Mavericks附带的是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: 错误: 找不到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以确认一切进展顺利。

2
你的方法也适用于Yosemite。唯一需要注意的是:在PHP 5.5.20的情况下使用./configure --with-pgsql=/usr/local/Cellar/postgresql/9.4.1/;将extension=pgsql.so添加到/etc/php.ini(原始文件名为php.ini.default)。 - Igor de Lorenzi

7

对于那些使用Homebrew安装了php7/ngix/postgres的人来说

可以使用以下命令安装PostgreSQL模块:

brew install php70-pdo-pgsql

接下来,您需要重启php服务:

brew services restart php70

3

对于通过brew安装的php56

brew install php56-pdo-pgsql

1
我使用的是Sierra系统,但这个方法对我并没有起作用。虽然安装已经完成,但在phpinfo()中却没有出现pdo_pgsql - Black
嗨,@Francis,你有在终端中输入 php -i | grep pdo_pgsql 吗?或者重启你的 web 服务器来查看在浏览器中。参考我的屏幕截图:http://prnt.sc/dcmkcp - ThangTD
嗨 - 找到问题了。 Sierra服务器当然有至少两个PHP实例,具有自己的php.ini文件; 一个在 /private/etc 中,另一个在 /Applications/Server.app/Contents/ServerRoot/private/etc/php.ini 中。谢谢。 - Black
1
是的,我想告诉你要确保PHP版本和其位置是否正确。最好使用homebrew安装PHP,而不是默认的安装方式。因为当你升级你的MacOS时,它的配置会丢失。 - ThangTD

3

苹果电脑操作系统X El Capitan用户可以轻松升级他们的PHP版本到5.6。以下命令只需要一行即可完成。

curl -s http://php-osx.liip.ch/install.sh | bash -s 5.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版本并面临相同问题的人可能的解决方案。

2

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

/Library/PostgreSQL/9.3

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

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

0

0
我下载了适用于Mac的PostgreSQL,并在安装后使用堆栈生成器端到端的安装整个EnterpriseDB Apache/PHP堆栈。我提到这是一种可能节省时间的选项,但对于所有情况可能并不理想。如果与Mac OS X一起提供的apache和postgres从未启动,则应该可以正常工作。
为了保持现有的apache托管应用程序(即已安装PostgreSQL之前的遗留应用)稳定,我只需在端口81上安装更新的EnterpriseDB apache(如果已经运行遗留apache实例,则stackbuilder将提示新端口)。然后,在httpd.conf中使用mod_proxy来为在PostgreSQL上托管的应用程序提供无缝用户体验的端口80上运行的apache。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接