probleme avec extensions

nom d'utilisateur
Invité n'ayant pas de compte PHPfrance

06 avr. 2008, 18:24

Bonjour a tous, j'ai un upload et je veux autoriser seulement certaines extentions alors j'ai fais un truc simple :
 
$autorise = array(".jpeg");

$image = $_FILES['photo']['type'];

if(!in_array($image, $autorise )){$erreur = "Format de photo incorrect.";}

J'ai ainsi fait un test avec un jpeg ca passe ensuite un truc au hasard c'etait .tif ca passe pas donc je me suis di c'est bon mais qd j'ai testé avec .php ou .txt ca passe aussi , y'a un souci pkoi deja ca n'autorise pas seulement les .jpeg et aussi pkoi certains qui ne sont pas autorisees passent et pas d'autres. Merci de votre aide

nom d'utilisateur
Invité n'ayant pas de compte PHPfrance

06 avr. 2008, 19:13

apres quelques recherches j'ai trouvé un truc plus costaud :
$AUTH_EXT = array( ".jpeg");
function isExtAuthorized($ext){
	global $AUTH_EXT;
	if(in_array($ext, $AUTH_EXT)){
		return true;
	}else{
		return false;
	}
}
$extension1 = strrchr($_FILES['photo1']['name'], ".") ;
//$extension2 = strrchr($_FILES['photo2']['name'], ".") ;
//$extension3 = strrchr($_FILES['photo3']['name'], ".") ;

if(!isExtAuthorized($extension1)){$erreur = "Format de photo incorrect.";} 
 
ca a l'air d'etre bon, par contre contrairement a l'autre j'arrive pas a tester plusieurs photos en meme temps (j'ai 3 champs fichier) , comment ecrire le truc pour tester les 3 Merciiiiii

Mammouth du PHP | 1885 Messages

06 avr. 2008, 21:12

Vérifier l'extension n'est pas suffisant niveau sécurité. Et si j'uploadais un fichier qui n'est pas du JPG mais qui avait une extension .jpg?

Il faudrait se tourner vers cette fonction afin de vérifier le type de l'image:
http://www.php.net/manual/fr/function.e ... getype.php

Autrement pour vérifier une extension:
Récupère l'extension d'un fichier incluant le point. Pour les fichiers à multiples extensions, seule la dernière extension est récupérée.
<?php
function extension( $filename ) {
    if (($res = strrpos($filename, '.')) !== FALSE) {
        return substr($filename, $res);
    } else {
        return '';
    }
}

function test_case( $filename ) {
	printf('<strong>%s</strong> = %s<br>', $filename, extension($filename) );
}

test_case('filename.ext');
test_case('filename.ext2.ext');
test_case('filename');
?>
Affichera:
filename.ext = .ext
filename.ext2.ext = .ext
filename =
Et pour vérifier tous les fichiers, tu peux utiliser une boucle foreach:
foreach ($_FILES as $file) {
  // Nom: $file['name']
}
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

nom d'utilisateur
Invité n'ayant pas de compte PHPfrance

06 avr. 2008, 22:24

Merci pour ta reponse, mais je comprends pas c'est ou que tu autorise tes extentions et c'est ou que tu teste si le fichier a l'extension que tu veux ou pas, merci encore

Mammouth du PHP | 1885 Messages

07 avr. 2008, 04:09

La fonction retourne l'extension du fichier. Avec le résultat, tu fais une comparaison avec ceux autorisées.

Tu peux toujours faire un truc de ce genre pour vérifier si une extension est autorisée:
<?php
# Extensions autorisées
$extensions_autorisees = array('.jpg', '.gif', '.png');

# Récupération de l'extension en minuscule
$extension = strtolower( extension('fichier.jpg') );

# Vérification
if (in_array($extension, $extensions_autorisees) === TRUE) {
  echo 'OK';
} else {
  echo 'Erreur!';
}
?>
La programmation est l'expression de la poésie d'un programmeur
Génération PHP