PHP 5.6.2 + Postgres + Apache 2.4 不适用于 Yosemite

标签 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

解决方案

根据这个 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 configtestsudo apachectl restart。将浏览器指向 phpinfo() 文件,您应该会看到 postgres 配置正确。

关于PHP 5.6.2 + Postgres + Apache 2.4 不适用于 Yosemite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26564233/

相关文章:

php - 比较并显示字符串/数组中的字符或不存在的字符

php - 如何在循环内对 php mysql 中的查询结果进行子查询

PostgreSQL 事务使用查询结果插入和查询另一个表然后返回原始查询结果

homebrew - Brew 更新在 mac 10.9 之后不起作用

自酿: cask 'java'定义无效

php - 如果当前表单中没有表单字段,如何在我的 POST 中包含表单字段?

javascript - 如何将javascript值存储到mysql数据库中?

sql - PostgreSQL - 如果所有列值为 'A' 或 NULL,我如何返回 ID

sql - 选择满足两个条件的ID

mysql - 从自动启动中删除 mysql