php文件强制下载

时间:2012-03-30 18:02:23

标签: php download

当我使用此代码下载此图像(仅用于测试目的)时,我打开下载的图像,它给我的全部错误。我试着用铬。用windows photo viewer打开它,它说它无法显示图片,因为它是空的??? 这是代码:

<?PHP
 // Define the path to file
 $file = 'http://www.media.lonelyplanet.com/lpi/12553/12553-11/469x264.jpg';

 if(!file)
 {
     // File doesn't exist, output error
     die('file not found');
 }
 else
 {
     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, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        ob_clean();
        flush();
        readfile($file);
        exit;
 }
 ?>

4 个答案:

答案 0 :(得分:4)

我有机会解决这个问题。你的问题是双重的。

首先,从网址中删除www.

其次,删除对filesize($file)的调用,这会引发错误,因为PHP在下载文件之前不知道文件的大小。 (真的,只需删除整行)

删除这两件事,我成功了。

答案 1 :(得分:2)

ob_clean()替换为ob_end_clean()

您仍然在缓冲,因此没有任何图片内容进入浏览器。

答案 2 :(得分:1)

替换:

ob_clean();
flush();
readfile($file);

使用:

echo get_file_contents($file);

答案 3 :(得分:1)

如果您只想通过点击链接从第三方下载文件,则可以使用锚标记中的新属性下载。

代码看起来像

<a download href="path/to/the/download/file"> Clicking on this link will force download the file</a>

适用于firefox和chrome最新版本。我应该提一下我在IE中没有检查过吗? :P