【发布时间】:2015-06-23 00:49:05
【问题描述】:
我们正在尝试让我们的 Apache PHP 模块使用 PostgreSQL .pgpass 文件来查找数据库连接的密码。我们一直无法让它工作。是否有某种限制或错误阻止了它的工作?
这是我们拥有的和我们检查过的。这一切都在 FreeBSD 10.1 上。
在命令行中一切正常。也就是说,除了 PHP 可执行文件是 /usr/local/bin/php 而不是 Apache PHP 模块之外,测试完全相同。
我们已经通过 phpinfo() 验证了 Apache 和命令行的构建尽可能相同,包括使用相同的共享库和相同的 php.ini 文件。
Apache 版本 2.2.29
- /usr/local/libexec/apache22/libphp5.so
- /usr/local/lib/php/20100525/pgsql.so
命令行 PHP 版本 5.4.38
- /usr/local/bin/php
- /usr/local/lib/php/20100525/pgsql.so
在这两种情况下,我们将环境变量 PGPASSFILE 设置为相同的值,并在 PHP 中验证它是否正确。
在这两种情况下,我们都使用相同的 Unix 用户名 ('www'),因此我们确定这不是文件路径或权限问题。
我们的系统上只有一个 PostgreSQL 库,位于 /usr/local/lib/libpq.so。这是应该使用 .pgpass 文件的二进制文件。
还有其他人遇到过这个问题吗?有什么我们忽略的吗?
Apache 的 libphp5.so 是否以某种方式绕过 PHP 库 pgsql.so 的使用并直接调用 libpq.so,尽管它被配置为使用相同的 PHP 共享库目录(即 /usr/local/lib/php/20100525/ )?
【问题讨论】:
-
出于我不明白的原因,我注意到我需要发出
putenv("PGSOMETHING=" .getenv("PGSOMETHING"));以使pg_connect尊重我的 apache 环境变量,否则它们将被忽略。可以试试吗? -
会试一试。谢谢!
-
很奇怪,因为那行代码应该只是一个空操作——它确实有效!谢谢。将您的评论变成答案,我会将其标记为已接受,以便您获得声誉积分。
-
我同意这很奇怪。我提出了一个问题:stackoverflow.com/questions/29700814 也许有一些合理的解释。
标签: php apache postgresql