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

Jor*_*les 30 php postgresql macos php-extension

我正在非常困难的时候让命令"pg_connect()"在我的Mac上正常工作.我正在编写一个PHP脚本(从控制台执行)来读取PostgreSQL数据库并通过电子邮件发送报告.

我已经进入我的php.ini文件并添加了

extension=pgsql.so
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了以下错误.

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()(此处为blah文件)

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

Fra*_*nes 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. 通过添加将扩展添加到您的php.ini文件extension=pgsql.so.(你可能已经这样做了)
  10. 重启Apache.

OS X Mountain Lion Apple autoconf的更新已从较新版本的XCode中删除,因此上述过程将在#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并允许您使用上面的说明安装模块.

  • 修复:只需在configure语句末尾指定--with-pgsql =/opt/local/lib/postgresql83 /.而且,我添加了pgsql.so,而不是pcntl.so.谢谢你的帮助! (7认同)
  • 感谢您的步骤,但不幸的是我在第6步遇到了问题.出现以下错误.`configure:error:找不到libpq-fe.h.请指定正确的PostgreSQL安装路径` (4认同)
  • @Jordan Scales - 它正在"/ usr","/ usr/local"和"/ usr/local/pgsql"中查找文件.如果PostgreSQL安装在系统的其他位置,则必须将`./configure`更改为`./configure --with -pgsql =/path/to/pgsql`. (4认同)
  • 我正在运行Mavericks,但这可能适用于其他版本.我的php.ini不存在,而是php.ini.default到位了.这个文件不是由php自动获取的,所以我做了一个'sudo cp /etc/php.ini.default /etc/php.ini'然后重新启动apache,这是使用'sudo/usr/sbin/apachectl restart'完成的. (3认同)

Dan*_*ier 36

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

brew install php55-pdo-pgsql

对于其他php版本,搜索:

brew search pgsql

  • 这是更好的答案(+1).目前接受的答案建议使用`brew`来安装`autoconf`,然后从源代码编译PHP.这是不必要的工作,因为你可以直接安装PostgreSQL,PHP和`phpXX-pdo-pgsql`包 - 全部使用[brew](http://brew.sh)用于Mac OSX. (2认同)

Jor*_*ego 8

OSX 10.9.4« Mavericks » 这对我有用

安装源

下载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
Run Code Online (Sandbox Code Playgroud)

配置PHP

cd /usr/include/php
./configure --without-iconv
sudo cp /etc/php.ini.default /etc/php.ini
Run Code Online (Sandbox Code Playgroud)

建立一个模块

我需要pdo_pgsql模块 - 假设您已经安装了必要的依赖项,相同的模式应该适用于任何模块:

cd ext/pdo_pgsql
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我有以下错误:

找不到autoconf.请检查您的autoconf安装和$ PHP_AUTOCONF环境变量.然后,重新运行此脚本.错误:`phpize'失败了

所以我不得不使用这个命令:

brew install autoconf
Run Code Online (Sandbox Code Playgroud)

然后:

phpize
Run Code Online (Sandbox Code Playgroud)

之后我尝试:./ configure

但我有下一个问题:

检查pg_config ...未找到configure:error:找不到libpq-fe.h.请指定正确的PostgreSQL安装路径

所以解决方案是指定正确的PostgreSQL安装路径:

./configure --with-pdo-pgsql=/Library/PostgreSQL/9.3/
make
sudo make install
Run Code Online (Sandbox Code Playgroud)

将pdo_pgsql.so复制到/ usr/lib/php/extensions/no-debug-non-zts-20100525.

然后简单地添加

extension=pdo_pgsql.so to /etc/php.ini 
Run Code Online (Sandbox Code Playgroud)

运行php -m以确认一切都按计划进行.

  • 你的方法也适用于约塞米蒂.唯一需要注意的是:在PHP 5.5.20的情况下使用`./configure --with-pgsql =/usr/local/Cellar/postgresql/9.4.1 /`; 将`extension = pgsql.so`添加到/etc/php.ini(最初是php.ini.default). (2认同)

ric*_*rdo 7

对于那些用自制软件安装php7/ngix/postgres的人

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

brew install php70-pdo-pgsql
Run Code Online (Sandbox Code Playgroud)

之后,你必须重新启动php服务:

brew services restart php70
Run Code Online (Sandbox Code Playgroud)