1:代码如下
<?php
$filename = "鲜花.jpg";
//因为php的函数比较古老不识别utf-8码,所以需要转换成它可以识别的gb2312
$filename = iconv("utf-8", "gb2312", $filename);
if(!file_exists($filename)) {
echo '文件不存在';
return;
}
$fp = fopen($filename, "r");
//获取文件的大小
$filesize = filesize($filename);
//echo "文件大小:$filesize";
//返回的文件
header("Content-type:application/octet-stream");
//按照字节大小返回
header("Accept-Ranges:bytes");
//返回文件大小
header("Accept-Length:$filesize");
//这里客户端的弹出对话框,对应的文件名
header("Content-Disposition:attachment;filename=".$filename);
//向客户端回送数据
$buffer = 1024;
//为了下载的安全,我们最好做一个文件字节读取计数器
$file_count = 0;
//判断文件是否结束
while(!feof($fp) && ($file_size - $file_count > 0)) {
$file_data = fread($fp, $buffer);
$file_count += $buffer;
//把部分数据回送给浏览器
echo $file_data;
}
//关闭文件
fclose($fp);
?>
程序执行效果图:
2:可以把下载文件的代码封装为一个函数
<?php
//$file_name: 文件名
//$file_sub_dir: 下载文件的子路径 /xxx/xxx/
function down_file($filename, $file_sub_dir) {
//因为php的函数比较古老不识别utf-8码,所以需要转换成它可以识别的gb2312
$filename = iconv("utf-8", "gb2312", $filename);
$file_path = $_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$filename;
echo $file_path;
if(!file_exists($file_path)) {
echo '文件不存在';
return;
}
$fp = fopen($file_path, "r");
//获取文件的大小
$filesize = filesize($file_path);
//echo "文件大小:$filesize";
//返回的文件
header("Content-type:application/octet-stream");
//按照字节大小返回
header("Accept-Ranges:bytes");
//返回文件大小
header("Accept-Length:$filesize");
//这里客户端的弹出对话框,对应的文件名
header("Content-Disposition:attachment;filename=".$filename);
//向客户端回送数据
$buffer = 1024;
//为了下载的安全,我们最好做一个文件字节读取计数器
$file_count = 0;
//判断文件是否结束
while(!feof($fp) && ($file_size - $file_count > 0)) {
$file_data = fread($fp, $buffer);
$file_count += $buffer;
//把部分数据回送给浏览器
echo $file_data;
}
//关闭文件
fclose($fp);
}
down_file('鲜花.jpg', '/Test/40/HTTP/images/');
?>