我安装了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
环境变量设置为密码值。