PHP上传图片(stream_copy_to_stream)

 使用thinkphp6框架时,写一个上传图片的功能,看了一下tp自带的上传,发现tp用的是stream_copy_to_stream(在数据流之间进行复制操作)  

因此对比了一下三种复制文件的方法效率

一、move_uploaded_file

// 获取文件
$file=$_FILES['file'];

// 文件接收路径-根据实际使用情况设置
$path="images/";

// 检查文件路径是否存在
if (!file_exists($path)) {
    mkdir($path, 0755, true);
}

// 获取图片系统临时路径
$tmp_name = $file['tmp_name'];

// 新的文件名
$new_name = '1.png';

move_uploaded_file($tmp_name,$path . $new_name);


60k的图片
开始时间:"0.99321100 1625645499"
结束结束:"0.99379600 1625645499"

400k的图片
开始时间:"0.71939200 1625645735"
结束时间:"0.72134300 1625645735"

4m的图片
开始时间:"0.19365900 1625647042"
结束时间:"0.22594000 1625647042"

二、file_get_contents

// 把整个文件读入一个字符串中
$f1 = file_get_contents($tmp_name);

// 打开新文件
$f2 = fopen($path.$new_name,'w+');

// 将f1写入新文件中
fwrite($f2,  $f1);

// 关闭新文件
fclose($f2);

60k的图片
开始时间:string(21) "0.15345100 1625645546"
结束时间:string(21) "0.15466100 1625645546"

400k的图片
开始时间:string(21) "0.16768800 1625645757"
结束时间:string(21) "0.16928200 1625645757"

4m的图片
开始时间:string(21) "0.16831100 1625647079"
结束时间:string(21) "0.20398100 1625647079"

三、stream_copy_to_stream

// 把整个文件读入一个字符串中
$f1 = fopen($tmp_name,'r');

// 打开新文件
$f2 = fopen($path.$new_name,'w+');

// 将f1写入新文件中
stream_copy_to_stream($f1,$f2);

// 关闭文件
fclose($f1);
fclose($f2);

60k的图片
开始时间:string(21) "0.89008800 1625645568"
结束时间:string(21) "0.89073700 1625645568"

400k的图片
开始时间:string(21) "0.60109300 1625645791"
结束时间:string(21) "0.60235100 1625645791"

4m的图片
开始时间:string(21) "0.20404400 1625647079"
结束时间:string(21) "0.21407500 1625647079"

最后对比stream_copy_to_stream的效率会好一点,至于三种方法那种更好也每个标准,看实际使用更适合什么了。要是有大佬对php数据流有研究的话欢迎指导。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值