特别地,我有一个表单,它提交给自己的POST
有一些参数,但是我想在提交表单时保留GET
参数。
例如,如果原来的URL是http://mydomain.com/download.php?fname=foobar.bin
,我希望它成为我制作POST
时的URL。但是URL的foobar.bin
部分可能会改变。
这是一个最小的工作示例
<?php
$pass = $_POST['pass'];
$filename = $_GET['p'];
$file = "../../cgi-secret/$filename";
if($pass == "foobar")
{
header('Content-type: application/octet-stream');
header("Content-Disposition: attachment; filename='"$filename'"");
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
// The PDF source is in original.pdf
readfile($file);
}
if(isset($_POST))
{?>
<form method="POST" action="download.php?p=$file">
Password <input type="password" name="pass"></input>
<input type="submit" name="submit" value="Get File" ></input>
</form>
<?}
?>
在这行,我想发布到当前的URL,无论它是
<form method="POST" action="download.php?p=$filename">
为了给出一些背景,我正试图修改我问题的答案如何用密码保护下载的二进制文件?这样我就可以将文件名作为GET
参数传递。
你看到$_SERVER['QUERY_STRING']
了吗?当您呈现表单时,除了循环现有的$_GET
数组之外,这可能是最直接的方法。
一个例子:
<form method="POST"
action="download.php?p=$filename&<?php echo $_SERVER['QUERY_STRING']; ?>">
如果您没有访问$_SERVER['QUERY_STRING']
的权限,您可以使用:
<form method="POST"
action="download.php?p=$filename&<?php foreach($_GET as $key => $val) echo $key.'='.urlencode($val).'&'; ?>">