web-dev-qa-db-ja.com

PhpSpreadsheetは、ファイルを保存する代わりに返します

Xmlxファイルを生成しました。これを保存して、次の方法でユーザーに提供できます。

_$writer->save('hello world.xlsx');
header('Location: hello world.xlsx');
_

ただし、ファイルはハードドライブに残ります。それはセキュリティ上の脅威であるため、私はそれを取り除く必要があります。

ファイルのリンクを解除してみました

_unlink('hello world.xlsx');
_

ただし、ファイルの削除が早すぎるため、ユーザーはファイルにアクセスできません。リンク解除で機能する場合は、ファイルが削除されることを確認する必要があります(die();などを適切に使用するため)

編集:セキュリティ上の理由だけではありません。プロバイダーはファイルの保存を許可していないため、これが唯一の方法です。

4
Brambor

使用する php://output

header('Content-Type: application/vnd.ms-Excel');
header('Content-Disposition: attachment; filename="file.xls"');
$writer->save("php://output");
7
Artyom Sokolov

ファイルへのリダイレクトの代わりに、作成直後にファイルを送信できます。

$filename = 'hello world.xlsx';
$writer->save($filename);

// Set the content-type:
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Length: ' . filesize($filename));
readfile($filename); // send file
unlink($filename); // delete file
exit;
1
Syscall