- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在尝试让我们的 Apache PHP 模块使用 PostgreSQL .pgpass 文件来查找数据库连接的密码。我们一直无法让它工作。是否有某种限制或错误阻止了它的工作?
这是我们所拥有的和我们检查过的。这一切都在 FreeBSD 10.1 上。
一切都按预期从命令行运行。也就是说,测试完全相同,除了 PHP 可执行文件是/usr/local/bin/php 而不是 Apache PHP 模块。
我们已经通过 phpinfo() 验证 Apache 和命令行的构建尽可能相同,包括使用相同的共享库和相同的 php.ini 文件。
Apache 版本 2.2.29
命令行 PHP 版本 5.4.38
在这两种情况下,我们都将环境变量 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/)?
最佳答案
即使 php 在它从 apache 继承的环境中有 PGPASSFILE
,正如 getenv("PGPASSFILE")
所证明的那样,看起来这个环境不是那个可用于最终处理 .pgpass
的共享 libpq
库。这就是此设置被忽略的原因。
解决方法是在连接到数据库之前将已经存在的变量重新放入环境中,在 php 中:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
显式 putenv
将以一种方式推送变量,使其可用于 libpq
的 getenv()
调用。这很奇怪,因为通常一个进程只有一个环境,但它似乎可以工作。
我在一个单独的问题中询问了扩展和 php 核心之间不一致的环境问题: Why is putenv() needed on an already defined environment variable?
关于php - 使用来自 Apache libphp5.so 的 .pgpass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29677674/
在我的apache模块中,没有libphp5.so: [root@localhost modules]# ls httpd.exp mod_cache.so
我一直在尝试使用 mail() 函数但没有成功:我没有任何确切的错误,它返回“true”但从未收到电子邮件。 sendmail 通过命令行运行 echo "Subject: sendmail test
我是一名优秀的程序员,十分优秀!