这篇文章主要介绍php是如何下载文件的,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
php下载文件的方法:1、从“$ _GET[& # 39;文件# 39;]”得到文件路径;2,设置头信息;3、使用“file_get_contents()”和“文件()”方法;4,通过“readfile”和“fopen”方法。
引用>
<强> php下载文件的方式强>
1。得到文件路径
从$ _GET[& # 39;文件# 39;]得到文件路径
$ path_parts=pathinfo ($ _GET[& # 39;文件# 39;]); file_name=path_parts美元[& # 39;basename # 39;]; file_path=& # 39;美元/mysecretpath & # 39;。file_name美元;务必使用上面这种方法得到路径,不能简单的字符串拼接得到路径
mypath=& # 39;美元/mysecretpath & # 39;。$ _GET[& # 39;文件# 39;];如果输入的是. ./. ./,就可以访问任何路径
2。设置头信息
头(& # 39;内容描述:文件传输# 39;);//描述页面返回的结果 头(& # 39;内容类型:应用程序/八进制# 39;);//返回内容的类型,此处只知道是二进制流。具体返回类型可参考http://tool.oschina.net/commons 头(& # 39;附加项:附件;文件名=& # 39;.basename(文件)美元);//可以让浏览器弹出下载窗口 头(& # 39;Content-Transfer-Encoding:二进制# 39;);//内容编码方式,直接二进制,不要gzip压缩 头(& # 39;到期:0 & # 39;);//过期时间 头(& # 39;cache - control: must-revalidate& # 39;);//缓存策略,强制页面不缓存,作用与no - cache相同,但更严格,强制意味更明显 头(& # 39;杂注:公共# 39;); 头(& # 39;内容长度:& # 39;。文件大小(文件)美元);//文件大小,在文件超过2 g的时候,文件大小()返回的结果可能不正确3。输出文件之file_get_contents()方法
file_get_contents()把文件内容读取到字符串,也就是要把文件读到内存中,再输出内容
$ str=file_get_contents($文件); echo $ str;这种方式,只要文件稍微一大,就会超过内存限制
4。输出文件之文件()方法
与file_get_contents()差不多,只不过是文件()会把内容按行读取到数组中,也是需要占用内存
$ f=文件(文件); 虽然(列表(线,问美元)=每个($ f)) { 回声问美元; }文件大的时候也会超出内存限制
5。输出文件之readfile()方法
readfile()方法:读入一个文件并写入到输出缓冲
这种方式可以直接输出到缓冲,不会整个文件占用内存
前提要先清空缓冲,先要让用户看到下载文件的对话框
,(ob_get_level ()) ob_end_clean ();//设置完头以后 ob_clean (); 冲洗();//清空缓冲区 readfile(文件)美元;这种方法可以输出大文件,读取单个文件不会超出内存限制,但下面的情况除外。
readfile()在多人读取文件的时候同样会造成PHP内存耗尽:http://stackoverflow.com/questions/6627952/why-does-readfile-exhaust-php-memory
PHP必须读取文件并写入到输出缓冲区。为300 mb的文件,无论怎样实现你写(由许多小段,或1大块)PHP必须读取最终通过300 mb的文件。
如果多个用户下载该文件,将会有一个问题。(> set_time_limit (0); $ file=@fopen (file_path美元,“rb"); 而(! feof(文件)美元) { print (@fread(文件,1024 * 8)); ob_flush (); 冲洗(); }
fopen()可以读入大文件,每次可以指定读取一部分的内容。在操作大文件的时候也很有用
7。总结
利用PHP下载文件时,应该要注重场景。如果本身只是几个小文件被下载,那么使用PHP下载比较好;但是如果PHP要承受大量下载请求,这时下载文件就不该交给PHP做。
对于Apache有mod_xsendfile可以帮助完成下载任务,更简单也更快速
以上是PHP是如何下载文件的的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
php是如何下载文件的