假设我有一个托管Google的图片:https://www.google.ae/images/srpr/logo11w.png
我想下载此图片文件,而不是直接在浏览器中打开。
我试过了:
<?php
function downloadFile($file, $type)
{
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file");
header("Content-Type: $type");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
readfile($file);
}
downloadFile("img.jpg", "image/jpg");
?>
这适用于本地托管的图片,而不适用于像上面的Google示例一样远程托管的图片。
答案 0 :(得分:3)
readfile() manual page上的第一个示例名为&#39;使用readfile()&#39;强制下载,并带有.gif
文件:
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
在 Notes 部分下面是以下提示:
如果已启用fopen包装,则可以使用此函数将URL用作文件名。有关如何指定文件名的更多详细信息,请参阅fopen()。有关各种包装器具有哪些功能的信息,使用说明以及它们可能提供的任何预定义变量的信息,请参阅支持的协议和包装器。
因此,如果您只是将$file = 'https://www.google.ae/images/srpr/logo11w.png';
替换为$file = 'monkey.gif';
,则上述脚本应强制下载图片。
当然,这种方法的一大缺点是图像首先传输到您的服务器,然后下载到客户端。但是,正如@charlietfl wrote&#39;您无法控制其他服务器处理请求的方式。&#39;因此,您无法直接链接到原始来源并希望下载该文件。