我正在运行一个用于图像托管的网站,它具有为用户下载图像的功能,如果他们喜欢的话。但下载根本不起作用。它给我这是一个无效的图像。但我下载的大小与我在网站上的大小相同,这是我的代码,可以任何身体帮助
<?php
function get_remote_size($url) {
$headers = get_headers($url, 1);
if (isset($headers['Content-Length'])) return $headers['Content-Length'];
if (isset($headers['Content-length'])) return $headers['Content-length'];
$c = curl_init();
curl_setopt_array($c, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array('User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3'),
));
curl_exec($c);
return curl_getinfo($c, CURLINFO_SIZE_DOWNLOAD);
}
$url = 'http://localhost/ds.jpg';
$name = 'Beezfeed.jpg';
// Fetch and serve
function do_the_download($url,$name) {
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime($url)).' GMT');
header('Cache-Control: private',false);
header('Content-Type: image/jpg');
header('Content-Disposition: attachment; filename="'.$name.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '. get_remote_size($url) );
header('Connection: close');
readfileChunked( $url );
}
if(isset($_POST["downloadfile"])) {
do_the_download($url,$name);
}
function readfileChunked($filename, $retbytes=true){
$chunksize = 1*(1024*1024);
$buffer = '';
$cnt = 0;
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;
ob_flush();
flush();
if ($retbytes) {
$cnt += strlen($buffer);
}
}
$status = fclose($handle);
if ($retbytes && $status) {
return $cnt; // return num. bytes delivered like readfile() does.
}
return $status;
}
?>
<form method="POST">
<input type="submit" value="DOWNLOAD FILE" name="downloadfile"/>
</form>
我只是提供一个原始代码,没有CSS和其他东西,使网站美丽。提前致谢
答案 0 :(得分:0)
要尝试两件事:
1)取出设置Last-Modified标题的行。当我尝试这个时,我从那条线上得到了一个警告,虽然在某些情况下可能会起作用。如果你真的需要修改时间,你可以通过了解实际的文件路径来获得它。
2)在die()
之后添加readfileChunked( $url );
。您需要阻止表单html出现在图像数据的底部。