Windows pgpass.conf文件不适用于PHP';s shell_exec()
我安装了windows/apache/php/postgres(PHP5.3和Postgres9) 我正试图从PHP执行一个“psql”命令行,因此为此我需要psql不要求密码。 我在Windows pgpass.conf文件不适用于PHP';s shell_exec(),php,windows,postgresql,passwords,Php,Windows,Postgresql,Passwords,我安装了windows/apache/php/postgres(PHP5.3和Postgres9) 我正试图从PHP执行一个“psql”命令行,因此为此我需要psql不要求密码。 我在%appdata%/postgresql路径中已经有一个pgpass.conf文件 如果我从windows命令行执行该行 "C:\Program Files\BitNami WAPPStack\postgresql\bin\psql.exe" -U postgres -w -d [DB] < "[SQL FI
%appdata%/postgresql
路径中已经有一个pgpass.conf文件
如果我从windows命令行执行该行
"C:\Program Files\BitNami WAPPStack\postgresql\bin\psql.exe" -U postgres -w -d [DB] < "[SQL FILE]"
“C:\Program Files\BitNami WAPPStack\postgresql\bin\psql.exe”-U postgres-w-d[DB]<”[SQL文件]“
它可以正常工作,但是当通过PHP使用shell_exec()完成时,它就不起作用了,apache错误日志显示“psql:fe_sendauth:no password supplied”
所以,我不知道为什么它是从命令行运行的,而不是从PHP的shell\u exec()
问候
%appdata%
在apache的执行环境和您测试的windows命令行之间可能不一样。通常在Windows上,apache将作为LocalSystem
帐户下的服务运行(请参阅)
但是您可以将pgpass.conf
文件存储在apache中的PGPASSFILE
环境变量所指向的不同位置(apache配置文件中的SetEnv
声明应该可以,或者php代码中也可以)
或者完全避免使用密码文件,并在执行
psql
之前直接将PGPASSWORD
环境变量设置为密码值,因为我这样做是为了本地连接到postgres,所以我只是更改了pg_hba.conf文件,以便本地连接现在是可信的。所以我不再使用pgpass文件。