將用戶直接指向顯示您的感謝信息的靜態頁面。然後,使用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>
你然後在您的下載腳本中獲取該值,並以任何您喜歡的方式處理它。
我覺得這是它。但是現在我如何將$ file的值傳遞給download.php。在我的原始版本中,我使用了表單發佈和多個值來創建$ file的值,並且這些值是由「包含」下載器文件僞傳遞的。我已經通過形式ost調用初始化php文件來將你的想法和我的想法結合起來,這個文件使用頭文件中的startedownload java腳本回應了你的頁面的新版本。現在我不能看到如何將js中的$ file值傳遞給php文件。 –
@MarkSowards查看我的更新是否有幫助。 – thordarson
謝謝你的證實。我正要試試這個。 –