gpt4 book ai didi

php - Laravel 从 php 输出缓冲区下载文件 VS。私有(private)存储文件夹|安全

转载 作者:行者123 更新时间:2023-12-03 00:32:38 26 4
gpt4 key购买 nike

用户可以下载 CSV 格式的查询结果。文件虽小(几KB),但内容很重要。

第一种方法是使用 php 输出缓冲区 php://:

$callback = function() use ($result, $columns) {
$file = fopen('php://output', 'w');
fputcsv($file, $columns);

foreach($result as $res) {
fputcsv($file, array($res->from_user, $res->to_user, $res->message, $res->date_added));
}
fclose($file);
};

return response()->stream($callback, 200, $headers);

第二种方法是在 Laravel 存储系统中创建一个新文件夹并将其设置为私有(private)并从那里下载文件。您甚至可以在下载后删除该文件:

'csv' => [
'driver' => 'local',
'root' => storage_path('csv'),
'visibility' => 'private',
],

这是创建/下载代码:

$file = fopen('../storage/csv/file.csv', 'w');
fputcsv($file, $columns);

foreach($result as $res) {
fputcsv($file, array($res->from_user, $res->to_user, $res->message, $res->date_added));
}
fclose($file);

return response()->make(Storage::disk('csv')->get('file.csv'), 200, $headers);

此返回将在下载后立即删除文件:

return response()->download(Storage::disk('csv')->path('file.csv'))
->deleteFileAfterSend(true);

什么会更安全?更好的方法是什么?我目前倾向于第二种存储方法。

最佳答案

选项 1

原因:

  • 您没有保留该文件,因此保留到磁盘的用途有限
  • 数据量很小,因此下载失败的可能性很小,如果发生这种情况,重新创建输出的处理时间也很短(我认为这是幕后的快速 SQL 查询?)
  • 将文件保留在存储中为文件复制创造了机会,您将来可能设置的增量备份或 rsync 可以在敏感文件被删除之前复制它们...
  • 从文件系统中删除文件并不一定会使数据无法恢复

如果您处理的是数十/数百 MB 的文件,我会有不同的想法......

关于php - Laravel 从 php 输出缓冲区下载文件 VS。私有(private)存储文件夹|安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57923991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com