Windows pgpass.conf文件不适用于PHP';s shell_exec()


Windows pgpass.conf file does not work with PHP's shell_exec()

我安装了windows/apache/php/postgres(php 5.3和postgres 9)我正在尝试从PHP执行一个"psql"命令行,所以为此我需要psql,而不需要密码。我在%appdata%/postgresql路径中已经有一个pgpass.conf文件

如果我从窗口命令行执行该行

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

它运行良好,但当使用shell_exec()通过PHP完成时,它不起作用,apache错误日志显示"psql: fe_sendauth: no password supplied"

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

问候!

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

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

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