0

ユーザーがスプレッドシートをアップロードできるツールがあり、スプレッドシートを Laravel-Excel で解析します。私の問題は、ファイルを解析する前に、ファイルが有効な Excel ファイルであることを確認するにはどうすればよいですか?

PHPOffice/Laravel-Excel ドキュメントを調べたところ、ファイルを検証する方法が見つかりませんでした。したがって、私の次の推測では、無効なファイルを Load() しようとすると、爆発して警告またはエラーが発生するということでした。ただし、それを行うのではなく、ファイルを解析して、何らかの方法でスプレッドシートに変換しようとします。たとえば、私はそれに pdf を与え、pdf ファイルで見つけた非バイナリ ジャンクを含むコレクションを生成しました。これは望ましくありません。

現在、ファイルを検証するために MIME タイプのチェックを行っています。

//valid mime types

$mimeTypes = [
    'application/csv', 'application/excel',
    'application/vnd.ms-excel', 'application/vnd.msexcel',
    'text/csv', 'text/anytext', 'text/plain', 'text/x-c', 
    'text/comma-separated-values',
    'inode/x-empty',
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
             ];
$file = request()->hasFile('file');
if ($file) {
    if (in_array(request()->file('file')->getClientMimeType(), $mimeTypes)) {
        //then parse the file
        Config::set('excel.import.heading', 'original');
        $data = Excel::load(request()->file('file')->path(), function ($reader) {
        })->get();
         //do some stuff with data...
    } else {
        //invalid file
    }
} else {
    //no file uploaded
}

これは理想的ではありません。考えられる MIME タイプにはエキゾチックな種類があるように思われるため、リストを積極的に維持する必要があり、特定の csv ファイルにはプレーンテキストの MIME タイプがあるため、非 csv プレーンテキスト ファイルはここでマスターを通過します。 . ファイルを検証するために、Laravel、Laravel-Excel、または PHPOffice のいずれかによって提供される標準的な方法はありますか?

4

1 に答える 1