我很难让命令“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):在第0行的Unknown中找不到图像
PHP致命错误:在...中调用未定义的函数pg_connect()(此处为blah文件)
运行phpinfo()
时,我对PostgreSQL一无所知,那么我的问题是什么?
答案 0 :(得分:71)
与OS X捆绑在一起的PHP版本不包括PostgreSQL。你必须自己编译扩展。以下是一些说明:
php -v
。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
cd php-5.3.3/ext/pgsql/
phpize
。./configure
。make
。sudo make install
。php.ini
将扩展程序添加到extension=pgsql.so
文件中。 (你可能已经这样做了) 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
并允许您使用上述说明安装模块。
答案 1 :(得分:36)
如果您使用home brew
,您可以使用以下命令解决此问题:
brew install php55-pdo-pgsql
对于其他php版本,请搜索:
brew search pgsql
答案 2 :(得分:8)
安装资源
下载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
配置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:error:找不到 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
确认一切按计划进行。
答案 3 :(得分:3)
OS X El Capitan用户可以简单地升级他们的PHP 5.6版本。这是一个可以做到这一点的单线。
curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6
答案 4 :(得分:3)
对于php56
来自brew:
brew install php56-pdo-pgsql
答案 5 :(得分:2)
默认情况下,PostgreSQL安装在MAC OS X上的一个不寻常的位置:
/Library/PostgreSQL/9.3
根据上面的位置,您可以输入:
./configure --with-pgsql=/Library/PostgreSQL/9.3
答案 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版本并面临同样问题的人的潜在解决方案。
答案 7 :(得分:0)
对于那些有openssl错误的人,make
这里是解决方案
当安装程序正在搜索1.0.0时,OSX使用openssl 0.98
请参阅此链接以获取说明
psycopg2 installation error - Library not loaded: libssl.dylib
答案 8 :(得分:0)
我下载了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上托管的应用程序提供无缝的用户体验。