我决定将我的 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.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
解决方案
根据这个 post,我卸载了所有并重新安装了所有
最佳答案
您安装了两个 PHP 副本。 Mac OS X 附带安装在 /usr/bin/php
的 PHP 副本。当您使用 homebrew
包管理器时,它会在 /usr/local/Cellar
中安装包,然后将它们符号链接(symbolic link)(在适当的时候)到 /usr/local/bin
。您可以通过键入 /usr/bin/php -v
和 /usr/local/bin/php -v
来验证这一点,您应该会得到两个不同的输出。
当您使用homebrew
安装postgres
时,它会将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
配置正确。
关于PHP 5.6.2 + Postgres + Apache 2.4 不适用于 Yosemite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26564233/