【问题标题】:Enabling PostgreSQL support in PHP on Mac OS X在 Mac OS X 上启用 PHP 中的 PostgreSQL 支持
【发布时间】:2016-08-15 02:17:12
【问题描述】:

我很难让命令“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): image not found in Unknown on line 0
PHP 致命错误:在...中调用未定义的函数 pg_connect()(此处为 blah 文件)

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

【问题讨论】:

  • 您是否安装了正确的驱动程序?

标签: php macos postgresql php-extension


【解决方案1】:

与 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 并允许您使用上面的说明安装模块。

【讨论】:

  • 感谢您提供这些步骤,但不幸的是我卡在了第 6 步。出现以下错误。 configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
  • 已修复:只需在配置语句末尾指定 --with-pgsql=/opt/local/lib/postgresql83/ 即可。而且,我添加了 pgsql.so,而不是 pcntl.so。谢谢你的帮助!
  • @Jordan Scales - 它正在寻找“/usr”、“/usr/local”和“/usr/local/pgsql”中的文件。如果 PostgreSQL 安装在系统的其他位置,则必须将 ./configure 更改为 ./configure --with-pgsql=/path/to/pgsql。
  • 我正在运行 Mavericks,但这可能适用于其他版本。我的 php.ini 不存在,取而代之的是 php.ini.default。 php 不会自动获取此文件,因此我执行了“sudo cp /etc/php.ini.default /etc/php.ini”,然后使用“sudo /usr/sbin/apachectl restart”重新启动了 apache .
  • 我正在使用优胜美地...这里有大麻烦!!!这工作得很好,但只有在我通过终端命令安装了 XCODE 命令行工具之后xcode-select --install.所以,首先重新安装-select,然后按照这篇文章的说明进行操作。
【解决方案2】:

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

brew install php55-pdo-pgsql

对于其他 php 版本,搜索:

brew search pgsql

【讨论】:

  • 这是更好的答案(+1)。目前接受的答案建议使用 brew 安装 autoconf 然后从源代码编译 PHP。这是不必要的工作,因为您可以直接安装 PostgreSQL、PHP 和 phpXX-pdo-pgsql 包 - 对于 Mac OSX,所有这些都使用 brew。
  • 我尝试了这个并且安装成功(我在php -i 中看到 pdo_pgsql)但我仍然收到 pg_connect() not found 错误..
  • 实际上,这是一个更好的答案。因为现在几乎所有开发人员都使用某种数据包管理器。
【解决方案3】:

这对我适用于 OSX 10.9.4 «小牛队»

安装源

下载 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 安装和 $PHP_AUTOCONF 环境变量。然后,重新运行此脚本。错误: `phpize' 失败

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

brew install autoconf

然后:

phpize

之后我尝试这样做: 。/配置

但我遇到了下一个问题:

检查 pg_config...未找到配置:错误:找不到 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 以确认一切按计划进行。

【讨论】:

  • 您的方法也适用于优胜美地。唯一的注意事项是:在 PHP 5.5.20 的情况下使用 ./configure --with-pgsql=/usr/local/Cellar/postgresql/9.4.1/;将 extension=pgsql.so 添加到 /etc/php.ini(最初是 php.ini.default)。
【解决方案4】:

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

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

brew install php70-pdo-pgsql

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

brew services restart php70

【讨论】:

    【解决方案5】:

    OS X El Capitan 用户只需升级他们的 PHP 5.6 版本即可。这是一个可以做到这一点的单衬垫。

    卷曲-s http://php-osx.liip.ch/install.sh |庆典-s 5.6

    【讨论】:

      【解决方案6】:

      对于 php56 通过 brew:

      brew install php56-pdo-pgsql
      

      【讨论】:

      • 我在 Sierra 上,这对我不起作用。安装完成,但phpinfo()中没有出现pdo_pgsql
      • 嗨@Francis,你在终端通过php -i | grep pdo_pgsql检查了吗?或者重新启动您的网络服务器以在浏览器中查看。参考我的截图:prnt.sc/dcmkcp
      • 嗨 - 发现了问题。 Sierra Server 当然至少有两个带有自己的 php.ini 文件的 PHP 实例;一个在/private/etc,另一个在/Applications/Server.app/Contents/ServerRoot/private/etc/php.ini。谢谢
      • 是的,我打算告诉你确定 php 版本及其位置是否正确。最好将 php 与 homebrew 一起使用,而不是默认的。因为当你升级你的 MacOS 时它的配置会丢失
      【解决方案7】:

      PostgreSQL 默认安装在 MAC OS X 上一个不寻常的地方:

      /Library/PostgreSQL/9.3
      

      鉴于上面的位置,您可以键入以下内容:

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

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

          对于那些在 make 时遇到 openssl 错误的人,这里是解决方案

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

          请参阅此链接以获取说明

          psycopg2 installation error - Library not loaded: libssl.dylib

          【讨论】:

            【解决方案10】:

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

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

            【讨论】:

              猜你喜欢
              • 2017-09-19
              • 1970-01-01
              • 1970-01-01
              • 2013-08-01
              • 1970-01-01
              • 1970-01-01
              • 2018-07-09
              • 2011-12-20
              相关资源
              最近更新 更多