0

我安装了 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]" 

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

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

问候!

4

1 回答 1

1

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

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

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

于 2012-07-11T20:12:02.020 回答