记得高中时候做过游戏私服,那时候的游戏主页是用php写的,因为文件很固定,客户端,登陆器和一些小工具,文件数目也不是很多,所以都是直接把下载链接写死的,直接链接到本地服务器的文件目录,今天qq群有个朋友突然问我用文件流做php下载功能,顺手写了个小demo,代码很简单,注释也全,直接上代码吧~
立即学习“PHP免费学习笔记(深入)”;
1、flush — 刷新输出缓冲
2、ob_clean — 清空(擦掉)输出缓冲区
此函数用来丢弃输出缓冲区中的内容。
此函数不会销毁输出缓冲区,而像 ob_end_clean() 函数会销毁输出缓冲区。
注:上面2个函数可以解决PHP下载文件内容乱码
立即学习“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>?>
立即学习“PHP免费学习笔记(深入)”;
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号