Windows pgpass.conf文件不适用于PHP的shell_exec()

时间:2012-07-11 16:03:09

标签: php windows postgresql passwords

我安装了windows / apache / php / postgres(php 5.3和Postgres 9) 我正在尝试从PHP执行“psql”命令行,所以为此我需要psql不要求密码。 我已经在%appdata%/postgresql路径

中有一个pgpass.conf文件

如果我从windows命令行执行该行

"C:\Program Files\BitNami WAPPStack\postgresql\bin\psql.exe" -U postgres -w -d [DB] < "[SQL FILE]" 

它工作正常,但是当通过PHP使用shell_exec()完成时它不起作用,apache错误日志说"psql: fe_sendauth: no password supplied"

所以,我不知道为什么它可以从命令行运行,但不能从PHP的shell_exec()

运行

问候!

1 个答案:

答案 0 :(得分:1)

%appdata%在apache的执行环境和您正在测试的Windows命令行之间可能不一样。通常在Windows上,apache应在LocalSystem帐户下作为服务运行(请参阅Using Apache HTTP Server on Microsoft Windows

但是您可以将pgpass.conf文件存储在apache中PGPASSFILE环境变量所指向的不同位置(apache配置文件中的SetEnv声明应该这样做,或者在php中码)。

或者完全避免使用密码文件,并在执行PGPASSWORD之前将psql环境变量直接设置为密码值。