5

この小さなプッシャーphpファイルを使用して、ユーザーがフォームに入力するときに保存する「exe」ファイルをダウンロードしています。

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);

この方法では、誰かがフォローできるオンラインの $file の場所へのリンクはありませんが、何らかの理由で、コードが実行された後、またはコードが実行される直前でも、サンキュー ページを表示できません。

試してみました header( "Location: $thankyouurl" ); 上記のコードの直後ですが、何も表示されず、上記のコードを実行する直前にサンキューページのhtmlソースをエコーし​​ようとしましたが、これによりexeファイルがWebページにダウンロードされ、実際にブラウザがクラッシュします.

助言がありますか???

4

4 に答える 4

15

ありがとうメッセージを表示する静的ページにユーザーを直接誘導します。次に、JavaScriptを使用window.locationしてをダウンロードスクリプトに設定します。

ダウンロードページのヘッダーが正しく設定されている場合、ユーザーがお礼のメッセージを読んでいる間、ブラウザはファイルのダウンロードを開始します。

ユーザーがJavaScriptを無効にしている場合に備えて、必ず直接ダウンロードリンクを表示してください。

例:

index.php

<a href="thankyou.php">Click here to download.</a>

thankyou.php

<html>
<head>
    <script type="text/javascript">
        function startDownload() {
            window.location = "/download.php";
        }
    </script>
</head>
<body onload="startDownload();">
    <h1>Thank you!</h1>
    <p>Your download will start in a moment. If it doesn't, use this <a href="download.php">direct link.</a></p>
</body>

download.php

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);

アップデート

データをindex.phpダウンロードスクリプトに渡すために、GET変数を使用できます。thankyou.phpこのページへのリンクthankyou.php?download=12は、ダウンロードが正しいファイルを取得するためのIDである場所になります。次に、次のようにマークアップにエコーアウトして、その変数をダウンロードスクリプトに渡します。

index.php

<a href="thankyou.php?download=12">Click here to download.</a>

thankyou.php

<html>
<head>
    <script type="text/javascript">
        function startDownload() {
            window.location = "/download.php?file=<?=$_GET['download']?>";
        }
    </script>
</head>
<body onload="startDownload();">
    <h1>Thank you!</h1>
    <p>Your download will start in a moment. If it doesn't, use this <a href="download.php?file=<?=$_GET['download']?>">direct link.</a></p>
</body>

次に、ダウンロードスクリプトで値を取得し、好きなように処理します。

于 2013-02-04T20:41:32.060 に答える
0

header('location: thank-you-page.php');次に示すように、元の方法を使用して、出口とともに最後に追加します。

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);

header('location: thank-you-page.php');
exit;
于 2013-02-04T20:48:02.323 に答える
0

これについてはよくわかりませんが、...

header('Location: thanks_page.php');

...うまくいかない、。readfile() の後に置くと? 本当にわからない、私の考えだけです!

于 2013-02-04T20:45:00.333 に答える
0

「windows.open( 'url to download file' )」で「ダウンロードページ」を開くことができます

例:

<script type="text/javascript">
    function openDownload()
    {
        window.open( "http://domain.com/download.php?file=file.pdf" );
        window.location = "http://domain.com/thanks.php";
    }
</script>

ファイルを直接ダウンロードするウィンドウを開くと、保存またはキャンセルを選択すると自動的に閉じられ、「親」ウィンドウが感謝のページにリダイレクトされます。

于 2013-02-04T20:47:18.037 に答える