2009-09-30 12 views
1

Comment puis-je vérifier si une extension de fichier et un type mime sont dans un tableau, c'est le code que j'ai actuellement.Cochez Importer un type de fichier à partir d'un tableau en PHP.

$upload_project_thum = $_FILES['upload_project_thum']['name']; 
$upload_project_thum_ext = substr($upload_project_thum, strrpos($upload_project_thum, '.') + 1);  
$upload_permitted_types= array('image/jpeg:jpg','image/pjpeg:jpg','image/gif:gif','image/png:png'); 

ensuite vers le bas où je vérifie si le fichier est un type valide j'ai cette boucle foreach

foreach ($upload_permitted_types as $image_type) { 
     $type = explode(":", $image_type); 
      if (($type[0] != $_FILES['upload_project_thum']['type']) && ($upload_project_thum_ext != $type[1])) { 
       $errmsg_arr[] = 'Please select a jpg, jpeg, gif, or png image to use as the project thumbnail'. $type[1] . " Type: ". $type[0]; 
       $errflag = true; 
     } 

Le problème est que si le type de fichier n'est pas tous les types de la tableau (ce qui est impossible) Je reçois une erreur. Cela fonctionne au point où si le fichier de téléchargement est dans le tableau ce message d'erreur ne se déclenchera pas.

Répondre

1

La façon dont je le fais maintenant:

$upload_permitted_types['mime']= array('image/jpeg','image/gif','image/png'); 
$upload_permitted_types['ext']= array('jpeg','jpg','gif','png'); 

if(!in_array($_FILES['upload_project_thum']['type'],$upload_permitted_types['mime']) || !in_array($upload_project_thum_ext,$upload_permitted_types['ext']) 
{ 
     $errmsg_arr[] = 'Please select a jpg, jpeg, gif, or png image to use as the project thumbnail'; 
     $errflag = true; 
} 

L'avantage est que cela permettra à un fichier .gif avec un mime de jpeg. Il ne force donc pas la mine et l'extension à correspondre, mais s'assure qu'ils sont tous les deux des types d'image.

+0

PHP ne fait-il pas correspondre l'extension à un type MIME dans le tableau '$ _FILES'? – alex

1
if (!in_array($_FILES['upload_project_thum']['type'], $upload_permitted_types)){ 

    exit("Unsupported file type"); 
} 
+0

Cela ne va-t-il pas seulement vérifier que le type mime est correct et donc je devrais changer mon tableau pour ne contenir que des types mime. En outre, $ _FILES ['upload_project_thum'] ne devrait pas être $ _FILES ['upload_project_thum'] [type]. J'apprends toujours donc je demande juste. Merci de votre aide! – BandonRandon

+0

Édité la réponse. Si vous voulez vérifier les extensions, alors le premier paramètre de in_array() serait l'extension de votre fichier téléchargé, et le second serait un tableau de toutes les extensions permises. – rubayeet

+0

donc vous dites avoir deux tableaux un pour l'extension et un pour le type mime? Ensuite, utilisez deux in_arrays? Je peux voir comment cela pourrait fonctionner. Merci de votre aide. – BandonRandon

1
if(!in_array($_FILES['upload_project_thum']['type'] . ':' . $upload_project_thum_ext, $upload_permitted_types)) { 
    Trigger-error-here; 
} 

Cela devrait chercher une chaîne appropriée collée à la fois le type et l'extension.

Une autre façon est de modifier votre boucle comme ça:

$is_allowed = false; 
foreach ($upload_permitted_types as $image_type) { 
    $type = explode(":", $image_type); 
    if (($type[0] == $_FILES['upload_project_thum']['type']) && ($type[1] == $upload_project_thum_ext)) { 
     $is_allowed = true; 
     break; 
    } 
} 

if(!$is_allowed) { 
     $errmsg_arr[] = 'Please select a jpg, jpeg, gif, or png image to use as the project thumbnail'. $type[1] . " Type: ". $type[0]; 
     $errflag = true; 
} 
+0

Merci, cela semble fonctionner. J'utilise ta première méthode. Vous êtes la deuxième méthode, c'est quelque chose que d'autres ont également suggéré et je suis sûr que cela fonctionnerait mais c'est juste plus de lignes de code. Merci de votre aide! – BandonRandon

0

J'aime obtenir le tableau de fichiers, puis utiliser un literating de boucle foreach sur les conditions possibles

$is_error = TRUE; 

$allowFileTypes = array(
      "image/png","image/jpg","image/jpeg" 
     ); 

$UserBaseFolder = 'userfiles/'.$_SESSION['user_id']; 
      if(!file_exists($UserBaseFolder)) { 
      mkdir("userfiles/".$_SESSION['user_id']."/"); 
     } 



    if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { 
     foreach($_FILES as $dat => $f) { 
       if($f['size'] == "0") { 
        $msg .= '<p><span class="alert alert-danger">You must upload a file.</span></p>'; 
        $is_error = FALSE; 
       } 

       if($f['size'] > "2000000") { 
        $msg .= '<p><span class="alert alert-danger">Your file size is too big.</span></p>'; 
        $is_error = FALSE; 
       } 


       if(!in_array($f['type'],$allowFileTypes)){ 
        $msg .= '<p><span class="alert alert-danger">Your file has invalid format. Please try again...</span></p>'; 
        $is_error = FALSE; 
       } else { 
       $filepath = $UserBaseFolder.'/'.time().'-'.$f['name']; 
       move_uploaded_file($f["tmp_name"], $filepath); 
       } 

retour msg $;

+0

$ allowFileTypes = array ( \t \t \t \t "image/png", "image/jpg", "image/jpeg" \t \t \t); –