我决定将我的mac升级到Yosemite,但现在Postgres没有工作。
这是我的环境
apachectl -v
Server version: Apache/2.4.9 (Unix)
Server built: Sep 9 2014 14:48:20
php -v
PHP 5.6.2 (cli) (built: Oct 24 2014 15:50:08)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
PostgreSQL 9.3
我试图做的事情:
1。使用brew安装
brew tap josegonzalez/php
brew install php56 --with-apache --with-mysql --with-intl --with-pgsql=/Library/PostgreSQL/9.3/
brew link --overwrite php56
启用扩展程序
sudo nano /usr/local/etc/php/5.6/php.ini
并添加
extension=pdo_pgsql.so
sudo apachectl restart
2。手动编译
sudo pecl download pdo_pgsql
sudo tar xzf PDO_PGSQL-1.0.2.tgz
sudo cd PDO_PGSQL-1.0.2
sudo phpize
sudo ./configure --with-pgsql=/Library/PostgreSQL/9.3/
sudo make
sudo make -j5 test
sudo make -j5 install
第3。 phpbrew安装
sudo phpbrew install --mirror http://br1.php.net 5.6.2 +pdo+pgsql=/Library/PostgreSQL/9.3/bin/
尝试使用此文件时,它确实无效:
<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);
$host = "host=127.0.0.1";
$port = "port=5432";
$dbname = "dbname=peajetron";
$credentials = "user=peajetron password=peajetron";
$db = pg_connect( "$host $port $dbname $credentials" ) or die('Could not connect');;
if(!$db){
echo "Error : Unable to open database\n";
} else {
echo "Opened database successfully\n";
}
?>
当我尝试这段代码时,我得到了同样的错误:
Fatal error: Call to undefined function pg_connect() in /Library/WebServer/Documents/testConnection.php on line 10
我不知道自己做错了什么。任何人都可以帮助我吗?
更新
根据phpinfo
编辑/etc/php.ini
使用php帮助我运行此命令
php -c /etc/php.ini
我发现了以下错误:
PHP Warning: PHP Startup: Unable to load dynamic library
'/usr/local/Cellar/php56/5.6.2/lib/php/extensions/no-debug-non-zts-20131226/php_pdo_pgsql.so'
- dlopen(/usr/local/Cellar/php56/5.6.2/lib/php/extensions/no-debug-non-zts-20131226
/php_pdo_pgsql.so, 9): image not found in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library
'/usr/local/Cellar/php56/5.6.2/lib/php/extensions/no-debug-non-zts-20131226/php_pgsql.so'
- dlopen(/usr/local/Cellar/php56/5.6.2/lib/php/extensions/no-debug-non-zts-20131226/php_pgsql.so,
9): image not found in Unknown on line 0
解决方案
我卸载了All并重新安装了所有内容,根据此post
答案 0 :(得分:3)
您安装了两个PHP副本。 Mac OS X附带了/usr/bin/php
安装的PHP副本。当您使用homebrew
软件包管理器时,它会在/usr/local/Cellar
中安装软件包,然后将它们(适当时为 )符号链接到/usr/local/bin
。您可以通过输入/usr/bin/php -v
和/usr/local/bin/php -v
来验证这一点,您应该得到两个不同的输出。
当您使用postgres
安装homebrew
时,它会将homebrew
已安装的PHP副本配置为使用postgres
。如果您运行/usr/local/bin/php -r 'phpinfo()'
,则会看到postgres
已安装。
您运行的apache
副本配置为使用Mac OS X安装的PHP副本,而不是homebrew
安装的副本。您需要重新配置Apache以使用正确的PHP模块。
尝试使用您喜欢的文本编辑器编辑/etc/apache2/httpd.conf
文件。找到说:
LoadModule php5_module libexec/apache2/libphp5.so
将其更改为:
LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so
保存文件,然后运行sudo apachectl configtest
和sudo apachectl restart
。将浏览器指向phpinfo()
文件,您应该看到postgres
配置正确。
答案 1 :(得分:0)
请按照以下步骤操作
1)运行yum install php-pdo_pgsql
2)将这些行添加到php.ini
extension=pdo_pgsql.so
extension=pgsql.so
3)重启apache
完成
答案 2 :(得分:-1)
我使用以下方法解决了这个问题:
brew install php56 --with-mysql --with-homebrew-apache
然后,添加到httpd.conf
LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so