PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题),
记得高中时候做过游戏私服,那时候的游戏主页是用PHP写的,因为文件很固定,客户端,登陆器和一些小工具,文件数目也不是很多,所以都是直接把下载链接写死的,直接链接到本地服务器的文件目录,今天QQ群有个朋友突然问我用文件流做PHP下载功能,顺手写了个小Demo,代码很简单,注释也全,直接上代码吧~
1、flush — 刷新输出缓冲
2、ob_clean — 清空(擦掉)输出缓冲区
立即学习“PHP免费学习笔记(深入)”;
保君发免费网站系统使用说明:一、 本程序完全免费,并且,保证功能全部可以使用,且无后门及木马等,请放心使用。二、 如果发现问题,请及时联系我们,我们会义务尽力解决所反映的问题。或到本公司网站下载更新程序。三、 修改三个文件就能成为自己的网站:1、顶部图片LOGO.GIF,2、替换透明动画:LOGO.SWF,3、修改#sys123.asp中的内容为你想要的内容。
此函数用来丢弃输出缓冲区中的内容。
此函数不会销毁输出缓冲区,而像 ob_end_clean() 函数会销毁输出缓冲区。
注:上面2个函数可以解决PHP下载文件内容乱码
<?<span>php
</span><span>//</span><span>fname为要下载的文件名
//$fpath为下载文件所在文件夹,默认是downlod</span>
<span>function</span> download(<span>$fname</span>,<span>$fpath</span>="download/"<span>){
</span><span>//</span><span>避免中文文件名出现检测不到文件名的情况,进行转码utf-8->gbk</span>
<span>$filename</span>=<span>iconv</span>('utf-8', 'gb2312', <span>$fname</span><span>);
</span><span>$path</span>=<span>$fpath</span>.<span>$filename</span><span>;
</span><span>if</span>(!<span>file_exists</span>(<span>$path</span>)){<span>//</span><span>检测文件是否存在</span>
<span>echo</span> "文件不存在!"<span>;
</span><span>die</span><span>();
}
</span><span>$fp</span>=<span>fopen</span>(<span>$path</span>,'r');<span>//</span><span>只读方式打开</span>
<span>$filesize</span>=<span>filesize</span>(<span>$path</span>);<span>//</span><span>文件大小
//返回的文件(流形式)</span>
<span>header</span>("Content-type: application/octet-stream"<span>);
</span><span>//</span><span>按照字节大小返回</span>
<span>header</span>("Accept-Ranges: bytes"<span>);
</span><span>//</span><span>返回文件大小</span>
<span>header</span>("Accept-Length: <span>$filesize</span>"<span>);
</span><span>//</span><span>这里客户端的弹出对话框,对应的文件名</span>
<span>header</span>("Content-Disposition: attachment; filename=".<span>$filename</span><span>);
</span><span>//</span><span>================重点====================</span>
<span>ob_clean</span><span>();
</span><span>flush</span><span>();
</span><span>//</span><span>=================重点===================
//设置分流</span>
<span>$buffer</span>=1024<span>;
</span><span>//</span><span>来个文件字节计数器</span>
<span>$count</span>=0<span>;
</span><span>while</span>(!<span>feof</span>(<span>$fp</span>)&&(<span>$filesize</span>-<span>$count</span>>0<span>)){
</span><span>$data</span>=<span>fread</span>(<span>$fp</span>,<span>$buffer</span><span>);
</span><span>$count</span>+=<span>$data</span>;<span>//</span><span>计数</span>
<span>echo</span> <span>$data</span>;<span>//</span><span>传数据给浏览器端</span>
<span> }
</span><span>fclose</span>(<span>$fp</span><span>);
}
download(</span>"CGEX脚本清单.doc"<span>);
</span>?>










