用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 ); ?> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话