本地PHP下载程序测试,图片打不开

a.html文件<ahref="FileDown.php?filename=xx.jpg">文件下载</a>FileDown.php文件<?phprequire"File... a.html文件
<a href="FileDown.php?filename=xx.jpg">文件下载</a>
FileDown.php文件
<?php
require "FileDownService.php";
header("Content-type:text/html;charset=utf-8");
//接受要下载的文件名字
$file_name=$_REQUEST['filename'];
//调用
down_file($file_name,"/");
//down_file("3.jpg","/");//注释$file_name=$_REQUEST['filename'];后,测试图片下载变大

?>
FileDownService.php文件
<?php
//参数说明 $file_name 文件名
//$file_sub_dir: 下载文件的子路径 '"/xxx/xxx/"
function down_file($file_name,$file_sub_dir){
//如果文件是中文.
//$file_name='xx.jpg';
//原因 php文件函数,比较古老,需要对中文转码 gb2312
$file_name=iconv("utf-8","gb2312",$file_name);
//绝对路径
$file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
//如果你希望绝对路径
//1.打开文件
if(!file_exists($file_path)){
echo "文件不存在!";
return ;
}
$fp=fopen($file_path,"r");
//获取下载文件的大小
$file_size=filesize($file_path);
if($file_size>10*1024*1024){
echo "<script language='javascript'>window.alert('过大')</script>";
return ;
}
//返回的文件
header("Content-type: application/octet-stream");
//按照字节大小返回
header("Accept-Ranges: bytes");
//返回文件大小
header("Accept-Length: $file_size");
//这里客户端的弹出对话框,对应的文件名
header("Content-Disposition: attachment; filename=".$file_name);
//向客户端回送数据
$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("3.jpg","/"); //测试FileDownService.php,下载没有问题
?>

图片用txt打开比较。
测试A.html和FileDown下载不成功。转码都是UTF-8,没有带BOM。
测试FileDownService.php,下载成功。
PHPnow搭建的环境,
SERVER_SOFTWARE Apache/2.0.63 (Win32) PHP/5.3.5
本地9.test.com测试。
展开
 我来答
jack_wang0823
2015-12-17 · TA获得超过2957个赞
知道大有可为答主
回答量:4143
采纳率:87%
帮助的人:1453万
展开全部

测试过你的代码 木有问题...



可能出现的问题是  你的代码储存格式 不都是  UTF8 W/O/ BOM  统一文件格式以后再试一次

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式