PHP 5.6.2 + Postgres + Apache 2.4在Yosemite上不起作用

时间:2014-10-25 15:47:25

标签: php postgresql homebrew osx-yosemite

我决定将我的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

解决方案

我卸载了All并重新安装了所有内容,根据此post

3 个答案:

答案 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 configtestsudo 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