【发布时间】:2019-07-06 15:21:00
【问题描述】:
Storage::disk('local')
->append('/newsletter_lists/'.$contact_file_name.'.csv',
$contact->email.','.$contact->salutation.','.$contact->lastname.','.$contact->unsubscribelink.','.$contact->bonus
);
这是 Laravel 中的代码,它在 foreach 循环中写入 csv 文件(从数据库中加载块)。
但据我所知,append() 方法每次都打开文件,将内容加载到内存中,添加新行并再次保存文件,这需要大量记录(65 000)需要很长时间。
我正在尝试找到一种方法来附加到文件的末尾而不将内容加载到内存中(如果可能的话)还是我在这里采取了错误的方法?
【问题讨论】:
-
如果您不介意使用“vanilla” php,请查看
fopen和a+b模式。 -
@d3L 我不介意使用普通 php,fopen(a+b) 我知道它以二进制模式附加到文件的末尾,我只是在文档中找不到关于发生的事情php打开文件时的内存和速度。但会做一个快速基准测试,看看速度是否有差异。
-
看起来
append在 Flysystem 中写入文件末尾的想法已经实现,但尚未实现:github.com/thephpleague/flysystem/pull/696 -
@1000Nettles 是的,你是对的,在拉取请求中我可以看到更多问题,然后实际帮助贡献者。