使用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秒,改大就好。
转载于:https://blog.51cto.com/wenjianwzz/326885