用php写了一个文件下载程序,但是下载后,文件大小总是与原文件不同,代码如下:

1
2
3
4
5
6
7
8
9
10
<?php
$file_name="test.exe";
 
header("Content-Type:application/octet-stream");
header("Content-Disposition:attachment; filename=".$file_name);
header("Content-Length:".filesize($file_name));
 
readfile($file_name);
 
?>

后来仔细分析,好象每一次下载的总是多一个字节,用vi打开上面的程序仔细观看,发现在?>以后有一个空行,删掉这个空行,就好了。

总结:在<?php的前面以及?>的后面,一定不能有多余的东西,否则就会被当成字符被输出。但是在php代码内,空行就无所谓了。另:readfile下载2M的文件没有什么问题。(好象在什么地方见过,说是不能大于8192。)

 

header其实就是定义服务器传给客户端浏览器的参数,可以通过抓包观察来查看content-type的值。如:如果显示一个文本文件,可如下定义contend-type为text/plain(抓包可以发现此值),就能够正常显示一个文本文件。

1
2
3
4
5
6
7
8
<?php
$file_name="test.cfg";
 
header("Content-Type:text/plain");
header("Content-Length:".filesize($file_name));
readfile($file_name);
 
?>

 

posted on   胡彼德  阅读(533)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话



点击右上角即可分享
微信分享提示