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