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

 

 
  
  1. $ptr=0  
  2. while (true)  
  3. {  
  4.      $fd = fopen ($path"rb");  
  5.      fseek($fd$ptr);  
  6.      echo fread ($fd, 1024*1024);  
  7.      if(feof($fd))  
  8.       {  
  9.            fclose($fd);  
  10.            break;  
  11.        }  
  12.        $ptr=ftell($fd);  
  13.        fclose ($fd);  

  目前只想到这个方法,若哪位仁兄有更好的办法,望不吝赐教。

补充一点就是这样做也不能下载太大的文件,不是程序的原因,而是php配置文件里还有一个最大执行时间,一般为30秒,改大就好。