我正在非常困难的时候让命令"pg_connect()"在我的Mac上正常工作。 我正在编写一个PHP脚本(从控制台执行)来读取PostgreSQL数据库并通过电子邮件发送报告。
我已经进入我的php.ini文件并添加了
但是,我遇到了以下错误。
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并允许您使用上面的说明安装模块。
-
感谢您的步骤,但不幸的是我在第6步遇到了问题。出现以下错误。 configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
-
修复:只需在configure语句末尾指定--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。
-
@Jordan Scales - 没问题。在我有机会完成我的答案之前你解决了这个问题!
-
看起来他们移动了旧版本的位置。请尝试使用us.php.net/releases查找您要查找的版本的URL。
-
我正在运行Mavericks,但这可能适用于其他版本。我的php.ini不存在,而是php.ini.default到位了。这个文件不是由php自动获取的,所以我做了一个'sudo cp /etc/php.ini.default /etc/php.ini'然后重新启动apache,这是使用'sudo / usr / sbin / apachectl restart'完成的。
-
我正在使用优胜美地......在这里遇到大麻烦!!!这工作得很好,但只有在我通过终端命令xcode-select --install安装了XCODE命令行工具之后。所以,首先重新安装 - 选择,然后按照这篇文章的说明进行操作。
-
如果您收到有关"错误:使用未声明的标识符'HASH_KEY_NON_EXISTENT'"的错误,请编辑pgsql.c文件,并将EXISTENT的拼写更改为EXISTANT - 在所有位置都存在"A"HASH_KEY_NON_EXISTENT。然后再次运行make。
-
我无法超越@JordanScales错误。使用brew安装postgres ..应用程序没有这样做。
-
在El Capitan工作,但首先我需要这样做:stackoverflow.com/questions/32659348/
如果您使用home brew,则可以使用以下命令解决此问题:
brew install php55-pdo-pgsql
对于其他php版本,搜索:
brew search pgsql
-
这是更好的答案(+1)。目前接受的答案建议使用brew安装autoconf,然后从源代码编译PHP。这是不必要的工作,因为您可以直接安装PostgreSQL,PHP和phpXX-pdo-pgsql软件包 - 所有这些都使用brew for Mac OSX。
-
我试过这个并且安装成功(我在php -i中看到pdo_pgsql)但我仍然得到pg_connect() not found错误..
-
实际上,这是一个更好的答案。因为现在几乎所有开发人员都使用某种数据包管理器。
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模块 - 假设您已经安装了必要的依赖项,相同的模式应该适用于任何模块:
在我的情况下,我有以下错误:
找不到autoconf。请检查您的autoconf安装和
$ PHP_AUTOCONF环境变量。然后,重新运行此脚本。错误:
`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以确认一切都按计划进行。
-
你的方法也适用于约塞米蒂。唯一需要注意的是:在PHP 5.5.20的情况下使用./configure --with-pgsql=/usr/local/Cellar/postgresql/9.4.1/;将extension=pgsql.so添加到/etc/php.ini(最初是php.ini.default)。
对于那些用自制软件安装php7 / ngix / postgres的人
您可以使用以下命令安装PostgreSQL模块:
1
| brew install php70-pdo-pgsql |
之后,你必须重新启动php服务:
1
| brew services restart php70 |
对于php56通过brew:
1
| 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时其配置会丢失
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
| ./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