php是如何下载文件的

  介绍

这篇文章主要介绍php是如何下载文件的,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

php下载文件的方法:1、从“$ _GET[& # 39;文件# 39;]”得到文件路径;2,设置头信息;3、使用“file_get_contents()”和“文件()”方法;4,通过“readfile”和“fopen”方法。

 php是如何下载文件的

<强> 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是如何下载文件的