PHP 下载 file_put_contents vs readfile

set_time_limit(0);
ini_set('memory_limit', '512M');


//获取当前时间
function getTime($convert = true)
{


    return microtime($convert);
}


//获取当前内存
function memory()
{


    return memory_get_usage();
}




$m = memory();
$s = getTime();
$file = file_get_contents("a.zip", true);
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: " . filesize('a.zip'));
header('Content-Disposition: attachment; filename="a.zip"');
echo $file;




error_log('file_put_contents:         内存:'.(memory()-$m).',耗时:'.(getTime()-$s).'\r\n',3,'D:/1.txt');


/* readfile() benchmark */




$m = memory();
$s = getTime();
ob_start();
header('Content-Type: application/octet-stream');
header("Accept-Ranges: bytes");
header("Accept-Length: " . filesize('a.zip'));
header('Content-Disposition: attachment; filename="a.zip"');
header('Content-Transfer-Encoding: binary');
readfile('a.zip');
ob_end_clean();




error_log('readfile:         内存:'.(memory()-$m).',耗时:'.(getTime()-$s).'\r\n',3,'D:/1.txt');


结果如下:

2k文件
file_put_contents:         内存:2304,耗时:0.00099992752075195
readfile:                  内存:888,耗时: 0.002000093460083


20M文件
file_put_contents:         内存:50126256,耗时:0.21602201461792
readfile:                  内存:896,耗时:0.071007013320923


153M文件
file_put_contents:         内存:321370872,耗时:1.0341031551361
readfile:                  内存:840,耗时:1.9421939849854


结论:相同条件下在下载大文件时使用readfile更省内存,不容易导致php内存溢出问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值