【发布时间】:2009-10-13 19:47:11
【问题描述】:
我认为这应该很容易。我有一个分页的图片库,每张图片下面都有一个小链接,上面写着“下载 Comp”。这应该允许人们快速将 .jpg 文件(带有 PHP 生成的水印)下载到他们的计算机上。
现在,我知道我可以直接链接到 .jpg 文件,但这需要用户在新窗口中打开图像、右键单击、另存为...等。相反,我想要“下载 Comp" 链接以立即开始下载文件。
PHP.net 似乎建议使用 readfile(),因此每个“Download Comp”链接都被回显为“?download=true&g={$gallery}&i={$image}”。
然后在页面顶部,我查看是否 $_GET['download'] var isset,如果是,我运行以下代码:
if(isset($_GET['download'])) {
$gallery = $_GET['g'];
$image = $_GET['i'];
$file = "../watermark.php?src={$gallery}/images/{$image}";
header('Content-Description: File Transfer');
header('Content-Type: application/jpeg');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: public');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
}
链接需要很长时间,然后它会弹出一个对话框提示,要求您打开或保存文件,但是一旦您保存并尝试打开它,它就会说文件已损坏并且无法打开。
有什么想法吗?
【问题讨论】:
-
你打开
fopen_wrappers了吗?否则,readfile不能接受 URL 参数。 -
@Ken:很好,我什至没有注意到它是 URL 而不是路径。
-
readfile() 只会尝试下载绝对 URL。它需要以 http://hostname.... 开头。更好的是,不要使用 URL。请参阅下面的答案。
标签: php file download hyperlink