关于macos:在Mac OS X上启用PHP中的PostgreSQL支持

Enabling PostgreSQL support in PHP on Mac OS X

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

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

1
extension=pgsql.so

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

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)

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


与OS X捆绑在一起的PHP版本不包括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
  • 通过添加extension=pgsql.so将扩展名添加到php.ini文件中。 (你可能已经这样做了)
  • 重启Apache。
  • OS X Mountain Lion的更新
    Apple已从较新版本的XCode中删除autoconf,因此上述过程将在#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并允许您使用上面的说明安装模块。


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

    brew install php55-pdo-pgsql

    对于其他php版本,搜索:

    brew search pgsql


    OSX 10.9.4对我有用吗?小牛队?

    安装源

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

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

    配置PHP

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

    建立一个模块

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

    1
    cd ext/pdo_pgsql

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

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

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

    1
    brew install autoconf

    然后:

    1
    phpize

    之后我尝试做:
    。/配置

    但我有下一个问题:

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

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

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

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

    然后简单地添加

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

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


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

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

    1
    brew install php70-pdo-pgsql

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

    1
    brew services restart php70

    对于php56通过brew:

    1
    brew install php56-pdo-pgsql


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

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


    昨天我升级后试图让它在El Capitan上运行整整一天,但事实证明我忘了修改httpd.conf并将路径从默认的php模块(版本5.5.27)更改为我的路径已安装(版本5.6.14)。这应该在httpd.conf中通过修改LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so的默认LoadModule php5_module路径来完成。
    刚决定把它留在这里作为那些升级他们的操作系统或只是PHP版本并面临同样问题的人的潜在解决方案。


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

    1
    /Library/PostgreSQL/9.3

    鉴于上面的位置,您可以输入:

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

    我下载了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上托管的应用程序提供无缝的用户体验。


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

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

    请参阅此链接以获取说明

    psycopg2安装错误 - 未加载库:libssl.dylib