Question

Comment puis-je vérifier si une extension de fichier et le type mime sont dans un tableau c'est le code que j'ai actuellement.

$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');

puis 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 dans le tableau (ce qui est impossible) je reçois une erreur. Il fonctionne au point où si le fichier de téléchargement est dans le tableau que message d'erreur ne se déclenche pas.

Était-ce utile?

La solution 3

La façon dont je le fais maintenant est:

    $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 de cela est qu'il permettra à un fichier .gif avec un mime de jpeg. Donc, il ne force pas la mine et l'extension pour correspondre, mais ne se assurer qu'ils sont les deux types d'images.

Autres conseils

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

   exit("Unsupported file type");
}
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;
}

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 $;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top