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/');

?>