我们试图让我们的Apache PHP模块使用PostgreSQL .pgpass文件查找数据库连接的密码。我们一直无法让它工作。是否有某种限制或错误阻止了它的工作?使用Apache的.pgpass libphp5.so
这是我们有什么,我们已经检查。这一切都在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 38年5月4日
- 在/ usr/local/bin目录/ PHP
- 在/ usr /本地/李b/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 env vars,否则会被忽略。也许试试? –
会试一试。谢谢! – CXJ
奇怪,因为这行代码应该是一个没有操作 - 它的工作!谢谢。将您的评论置入答案中,并将其标记为已接受,以便您可以获得声望点。 – CXJ