0

特别是,我有一个带有一些参数的表单POST提交给它自己,但是我想在GET提交表单时保留这些参数。

例如,如果原始 URL 是http://mydomain.com/download.php?fname=foobar.bin,我希望它是我制作POST. 但是foobar.binURL 的一部分可能会改变。

这是一个最小的工作示例

<?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参数传递。

4

1 回答 1

0

你见过$_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).'&'; ?>">
于 2013-04-22T07:01:29.530 回答