如何创建PHP“下载即将开始”页面?

时间:2010-07-10 05:14:23

标签: php

我想创建一个显示

之类消息的PHP页面
Your download will begin shortly.

If it does not start, please click here to restart the download

,即主要网站上存在的相同类型的网页。

它会像这样工作:

<a href="download.php?file=abc.zip">Click here</a>

当用户点击该链接时,他会被导致download.php显示该消息,然后提供该文件以供下载。

我该怎么做?

非常感谢!

3 个答案:

答案 0 :(得分:2)

链接需要执行以下两项操作之一:

  • 直接指向您网络服务器上的文件
  • 指向一个PHP脚本,该脚本将执行NOTHING但设置相应的标题并将文件作为页面主体提供。没有文字输出!有关如何实际提供文件的信息,请参阅http://teddy.fr/blog/how-serve-big-files-through-php

让浏览器“独立”开始下载的一种方法是使用META REFRESH标记。

另一种方法是使用JavaScript,例如(来自Mozilla的Firefox下载页面):

function downloadURL() {
    // Only start the download if we're not in IE.
    if (download_url.length != 0 && navigator.appVersion.indexOf('MSIE') == -1) {
        // 5. automatically start the download of the file at the constructed download.mozilla.org URL
        window.location = download_url;
    }
}

// If we're in Safari, call via setTimeout() otherwise use onload.
if ( navigator.appVersion.indexOf('Safari') != -1 ) {
    window.setTimeout(downloadURL, 2500);
} else {
    window.onload = downloadURL;
}

答案 1 :(得分:2)

<?php
// download.php
$url = 'http://yourdomain/actual/download?link=file.zip'; // build file URL, from your $_POST['file'] most likely
?>
<html>
    <head>
        <!-- 5 seconds -->
          <meta http-equiv="Refresh" content="5; url=<?php echo $url;?>" />
    </head>
    <body>
        Download will start shortly.. or <a href="<?php echo $url;?>">click here</a>
    </body>
</html>

答案 2 :(得分:0)

如果您想确保下载文件(而不是浏览器或浏览器插件中显示),您可以设置Content-Disposition HTTP标头。例如,要强制下载PDF而不是在浏览器插件中打开:

header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="foo.pdf"');
readfile('foo.pdf');