2017-12-02 24 views
2

拡張子が ".zip"のファイルのみを受け入れることができます。これを制御するルールmime-type application/zipを追加しました。しかし、私はその内容を知らないので、未知のファイルを避けるためにzipファイルの内容をチェックする必要があります。 zipファイルの内容を安全に制御するにはどうすればよいですか?メインフォルダLaravelによるZipファイルの内容の確認

| - -

xxxxの

aaaa.adf:

は、私が抽出し laravelバージョンに https://github.com/Chumper/Zipperを使用しています

は5.5

public function store(Request $request, User $sharingUser) { 
     $rules = [ 
      'patient_case_id' => 'required|exists:patient_cases,id', 
      'file'    => 'required|mimes:zip,rar', 
     ]; 
} 

アップロードzipファイルのコンテンツツリーこのようなものです

| - bbbb.adf

| - cccc.adf

| -

dddd.adf | - aaaa.ocx

フォルダできるだけの.adfと.ocxのファイルを持っている...しかし、私は、フォルダ内のファイル数を知りません。

注:それはRESTfulなAPI

答えて

3

でそれについての詳細を見つけることができます。

validation ruleを新規作成します。要求にルールを設定し、ロジックを定義します。 passes()方法において

use League\Flysystem\Filesystem; 
use League\Flysystem\ZipArchive\ZipArchiveAdapter; 

$filesystem = new Filesystem(new ZipArchiveAdapter(getrealpath($value))); 

、ファイルを読み取るためにファイルシステムを設定します。私はあなたが一時的な記憶装置にファイルのパスを把握する必要があるかもしれないと想像しますgetrealpath($value)

次に、チェックのロジックを完成させます。

foreach ($filesystem->listContents() as $object) { 
    if (!in_array($object['mimetype'], ['mimetype1', 'mimetype2'])) { 
     return false; 
    } 

} 
return true; 

listContents()は、再帰的にすべてのファイルを一覧表示しますが、そのドキュメントを確認し、それはそれを行うにするオプションが存在する可能性がある場合、私は覚えていないことができます:あなたはそうのような内のファイルをループができました。あなたはmimetypeの比較を使用する必要はありません、最も理にかなったものを使用してください。

1

である私は、あなたがそれを解凍せずに、ZIPフォルダの内容を知りたいとだけ、それは右の受諾と思いますか?

このコードを使用すると、zipフォルダの内容を知ることができます。

<?php 
$za = new ZipArchive(); 

$za->open('theZip.zip'); 

for($i = 0; $i < $za->numFiles; $i++){ 
    $stat = $za->statIndex($i); 
    print_r(basename($stat['name']) . PHP_EOL); 
} 
?> 

あなたの条件を確認することができます。

あなたは私があなたの代わりにPHP League's ZipArchive Adapterを使用することをお勧めしますhttp://www.php.net/ziparchive

関連する問題