2010-11-11 6 views
0

J'ai cette extension vérificateur:PHP: exif_imagetype() ne fonctionne pas?

$upload_name = "file"; 
$max_file_size_in_bytes = 8388608; 
$extension_whitelist = array("jpg", "gif", "png", "jpeg"); 

/* checking extensions */ 
$path_info = pathinfo($_FILES[$upload_name]['name']); 
$file_extension = $path_info["extension"]; 
$is_valid_extension = false; 
foreach ($extension_whitelist as $extension) { 
    if (strcasecmp($file_extension, $extension) == 0) { 
     $is_valid_extension = true; 
     break; 
    } 
} 
if (!$is_valid_extension) { 
    echo "{"; 
    echo  "error: 'ext not allowed!'\n"; 
    echo "}"; 
    exit(0); 
} 

Et puis j'ajouté ceci:

if (exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_GIF 
     OR exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_JPEG 
     OR exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_PNG) { 
    echo "{"; 
    echo  "error: 'This is no photo..'\n"; 
    echo "}"; 
    exit(0); 
} 

Dès que je l'a ajouté à ma fonction ImageUpload, la fonction cesse de fonctionner. Je ne reçois aucune erreur, même pas celui que je me suis fait "ce n'est pas une photo", qu'est-ce qui ne va pas?

Juste vérifié avec mon hôte. Ils prennent en charge la fonction exif_imagetype()

+0

avant cela, pouvez-vous optimiser cette partie en premier? 'if (exif_imagetype ($ _FICHES [$ upload_name] ['nom'])! = IMAGETYPE_GIF OU exif_imagetype ($ _FICHES [$ upload_name] ['nom'])! = IMAGETYPE_JPEG OU exif_imagetype ($ _FICHES [$ upload_name] ['nom '])! = IMAGETYPE_PNG) 'remplacer à' switch', vous devez le répéter trois fois afin de déterminer 'exif_miagetype' – ajreal

+0

Je ne comprends pas, pouvez-vous montrer l'exemple? – Karem

+0

n'est pas mauvais avec votre code, mais il peut s'améliorer à quelque chose comme la première réponse - retour à votre problème, pouvez-vous vérifier 'is_uploaded_file' avant de tout initier? - http://www.php.net/manual/fr/function.is-uploaded-file.php – ajreal

Répondre

6

Voici l'exemple avec l'utilisation du commutateur:

switch(exif_imagetype($_FILES[$upload_name]['name'])) { 
    case IMAGETYPE_GIF: 
    case IMAGETYPE_JPEG: 
    case IMAGETYPE_PNG: 
     break; 
    default: 
     echo "{"; 
     echo  "error: 'This is no photo..'\n"; 
     echo "}"; 
     exit(0); 
} 

Votre script peut être utilisé aussi, mais vous devez mettre et entre les conditions:

if (exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_GIF 
     AND exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_JPEG 
     AND exif_imagetype($_FILES[$upload_name]['name']) != IMAGETYPE_PNG) { 
    echo "{"; 
    echo  "error: 'This is no photo..'\n"; 
    echo "}"; 
    exit(0); 
} 
0

Il y a une meilleure façon, plus courte, d'obtenir les types d'images que j'utilise actuellement (je ne sais pas si cela fonctionnera car il n'est pas documenté dans PHP.net car image_type_to_mime_type() peut aussi prendre un entier comme entrée):

function get_image_type($image_path_or_resource) { 
    $img = getimagesize($image_path_or_resource); 
    if (!empty($img[2])) // returns an integer code 
     return image_type_to_mime_type($img[2]); 
    return false; 
} 

echo get_image_type('somefile.gif'); 
// image/gif 
echo get_image_type('path/someotherfile.jpg'); 
// image/jpeg 

$image = get_image_type('somefile.gif'); 
if (!empty($image)){ 
    // fine, let's do some more coding 
} else { 
    // bad image :(
} 
0
if (exif_imagetype($_FILES['image']['tmp_name']) != IMAGETYPE_JPEG 
    AND exif_imagetype($_FILES['image']['tmp_name']) != IMAGETYPE_PNG) 
{ 
enter code here 
} 

Vous pouvez utiliser comme ça. Espérons que cela sera utile