2017-05-29 6 views
0

PHPで複数のファイルをアップロードしたいが、ファイルタイプの1つがSRTではない場合はループ全体をキャンセルしてエラーが発生するが、エラーは、ファイルや結果の集計に基づいて繰り返されます。このようなものです:、PHPで複数アップロードのチェックタイプ

ERROR
ERROR
ERROR

のいずれかの条件がOKでなかった場合、私がしたいです操作をキャンセルして、担当者なしでエラーを表示するだけです

<?php 

if (isset($_POST['upload_multiple']) && !empty($_FILES['files']['name'][0])) { 

    $files = $_FILES['files']; 
    $allowed = ['srt', 'idx', 'sub']; 
    $msg = []; 

    foreach ($files['name'] as $position => $file_name) { 
     $files_name = $files['name'][$position]; 
     $files_tmp_name = $files['tmp_name'][$position]; 
     $files_type = explode('.', $files_name); 
     $files_type = end($files_type); 

     if (in_array($files_type, $allowed)) { 
      move_uploaded_file($files_tmp_name, 'upload/' . $files_name); 
     }else { 
      $msg[] = 'ERROR <BR>'; 
     } 
    } 

} else { 
    echo "Choose a File!"; 
} 

?> 
+0

を食べるとmove_uploaded_fileコールをエコー、どのような数ではと戻ってくるのでしょうか? – Farkie

+0

@farkie後でファイルをチェックしたいのですが、条件が良かったらアップロードを開始しました –

+0

何が問題なのですか?明確にするために編集してください。 –

答えて

0
 <?php 

    if (isset($_POST['upload_multiple']) && !empty($_FILES['files']['name'][0])) { 

     $files = $_FILES['files']; 
     $allowed = ['srt', 'idx', 'sub']; 
     $msg = []; 

     array_walk($files, function($file) use (&$msg){ 
      $path_extension = pathinfo($file, PATHINFO_EXTENSION); 
      if (!in_array($path_extension, $allowed)) { 
       $msg[0] = 'ERROR <BR>'; 
      } 
     } 

     if(empty($msg)){ 

     foreach ($files['name'] as $position => $file_name) { 
      $files_name = $files['name'][$position]; 
      $files_tmp_name = $files['tmp_name'][$position]; 
      $files_type = explode('.', $files_name); 
      $files_type = end($files_type); 
      move_uploaded_file($files_tmp_name, 'upload/' . $files_name); 
     } 
     } 

    } else { 
     echo "Choose a File!"; 
    } 

?> 
+0

ファイルを保存する前にファイル名を確認する方が良いでしょう。このコードは、無効な拡張子を持つファイルの前に保存されたファイルを保存し、削除しません。 – Anton

+0

よく、私はarray_walk関数を推奨することができます – buzlee

+0

@Anton保存しないでエラーを取得します –

0
<?php 

if (isset($_POST['upload_multiple']) && !empty($_FILES['files']['name'][0])) { 

    $files = $_FILES['files']; 
    $allowed = ['srt', 'idx', 'sub']; 
    $msg = []; 

    $extensionsAreValid = true; 
    foreach ($files['name'] as $position => $file_name) { 
     $files_name = $files['name'][$position]; 
     $files_type = end(explode('.', $files_name)); 

     if (!in_array($files_type, $allowed)) { 
      $msg[] = "ERROR: $files_name has invalid extension. <BR>"; 
      $extensionsAreValid = false; 
      break; 
     } 
    } 

    if ($extensionsAreValid) { 
     foreach ($files['name'] as $position => $file_name) { 
      move_uploaded_file($files['tmp_name'][$position], 'upload/' . $files['name'][$position]); 
     } 
    } 
} else { 
    echo "Choose a File!"; 
} 
関連する問題