xxqyzsc 发表于 2018-12-22 07:54:11

PHP实现大文件的下载

  使用PHP文件实现文件下载的时候,最方便的莫过于readfile函数了,但是如果下载对象是一个大文件,由于php默认情况下都限制了最大内存占用,所以使用readfile根本不行。解决这个问题,我的思路是使用fseek和ftell,读一段,关闭文件,再打开,然后再定位到原来位置,继续读。代码如下。


[*]$ptr=0
[*]while (true)
[*]{
[*]   $fd = fopen ($path, "rb");
[*]   fseek($fd, $ptr);
[*]   echo fread ($fd, 1024*1024);
[*]   if(feof($fd))
[*]      {
[*]         fclose($fd);
[*]         break;
[*]       }
[*]       $ptr=ftell($fd);
[*]       fclose ($fd);
[*]}

  目前只想到这个方法,若哪位仁兄有更好的办法,望不吝赐教。
  补充一点就是这样做也不能下载太大的文件,不是程序的原因,而是php配置文件里还有一个最大执行时间,一般为30秒,改大就好。



页: [1]
查看完整版本: PHP实现大文件的下载