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 に答える