交互式提示我试图执行从Web界面的几个的PostgreSQL数据库命令。 我使用proc_open()来管道到Windows命令提示符。 因为psql的(和所有其他Postgres的命令),不接受的密码作为一个选项,我必须将密码写流。 下面的代码会导致浏览器挂起。资源不被创建,或者密码没有正确传输。任何建议都欢迎在这一点上。与proc_open()上的psql查询
$cmd = '""C:\\Program files\\PostgreSQL\\9.0\\bin\\psql.exe" --host localhost --port 5432 -U postgres --dbname $database_name --command "$query""';
$p=proc_open($cmd,
array(array("pipe","r"), array("pipe","w"), array("pipe","w")),
$pipes);
if (is_resource($p)){
fwrite($pipes[0],"mypassword");
fclose($pipes[0]);
proc_terminate($p);
proc_close($p);
}
[。你会发现疯狂的两双,引用的命令 - 这显然需要某种原因窗口]
变通解决这个问题,欢迎:
- 我以前使用的系统()和exec()尝试,但放弃了,因为他们不处理交互提示。在交互中使用php有没有更好的选择?
- pg_query()是与Postgres数据库交互的主命令,但的pg_dump和pg_restore的操作不被支持。是否有另一种方法来备份和恢复二进制postgres .backup文件,可以用PHP来完成?
您可以使用'PGPASSWORD'环境变量或'〜/ .pgpass'作为密码(http://stackoverflow.com/a/7184288/479863),但不了解PHP-isms。 –