Intérrogation sur unset() ?

WRInaute passionné
Bonjour,

Pour ma culture perso., je ne comprend pas très bien l'utilisation du unset($erreur); dans le code suivant ? J'ai bien compris que cette fonction permet de détruire la variable $erreur mais à t'elle vraiment sa place dans ce code et si oui pourquoi ?

Code:
<?php

if(isset($_FILES['photo']))
{
// params
unset($erreur);
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
$taille_max = 100000;
$dest_dossier = 'upload/photo/';
// vérifications
if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1),
$extensions_ok ) )
{
$erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg
!';
}
elseif( file_exists($_FILES['photo']['tmp_name'])
and filesize($_FILES['photo']['tmp_name']) > $taille_max)
{
$erreur = 'Votre fichier doit faire moins de 100Ko !';
}
// copie du fichier
if(!isset($erreur))
{
$dest_fichier = basename($_FILES['photo']['name']);
// formatage nom fichier
// enlever les accents
$dest_fichier = strtr($dest_fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ
Ýàáâãäåçèéêëìíîïðòóôõöùúû
üýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_',
$dest_fichier);
// copie du fichier
$photo = $dest_fichier;
if (move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier .
$dest_fichier)) { echo "copie effectuée"; }
}
?>

Merci de vos lumières :mrgreen:
 
WRInaute passionné
Merci honolulu ,

moi aussi je consulte le manuel php quand je ne sais pas mais dans le contexte actuelle du code, je ne comprend toujours pas ce que fait cette fonction ici ^^ ?
Quelle est l'intérêt de détruire la variable $erreur ?
 
WRInaute accro
ca veut donc dire que tu l'a récupéré quelque part ce bout de code. il y avait peut-être avant une utilisation de $erreur.
 
WRInaute impliqué
c'est une sorte de reset, de "remise à 0" qui vient d'ailleurs (d'un autre script) effectivement.. il ne sert pas à grand chose ici :wink:
edit : désolé, je ne voulais pas être condescendant dans le 1er post :wink:
 
WRInaute passionné
Effectivement e-kiwi, il sagit d'un script d'upload que l'on trouve un peut partout (-http://www.siteduzero.com/forum-83-854-p1-systeme-d-upload.html par exemple). Mais même dans cette exemple, je vois pas pourquoi cette fonction est présente ?

Pas de soucis honolulu :wink: .
 
WRInaute passionné
Bonjour,

elle vient détruire toute affectation préalable de la variable du nom $erreur. Le script fait un unset car ensuite il teste sur un isset; or même en mettant à la variable à '' (chaine vide) ou à la valeur false, le isset renverra vrai... Seules une variable totalement inexistante renvoie false sur un isset. Le unset est donc indispensable dans ce cas.

Si tu veux faire autrement : tu remplaces unset($erreur) par $erreur = '' puis pour le test !isset($erreur), tu remplaces par $erreur != ''

Ensuite, la technique unset/isset est nettement, mais nettement plus rapide que l'affectation a une chaine vide puis test d'une chaine, car dans le cas du unset/isset, c'est juste une comparaison de bit. ;-) (en gros, c'est 8 à 16 fois plus rapide que le test d'une chaine de caractère).

En résumé, c'est la technique utilisée par les bons (les vrais) programmeurs. :mrgreen:

Jef (7-8 ans d'assembleur et qui tape encore quelques lignes en fortran interfacé à du prolog)
 
WRInaute impliqué
anemone-clown a dit:
Ensuite, la technique unset/isset est nettement, mais nettement plus rapide que l'affectation a une chaine vide puis test d'une chaine, car dans le cas du unset/isset, c'est juste une comparaison de bit. ;-) (en gros, c'est 8 à 16 fois plus rapide que le test d'une chaine de caractère).

merci pour cette précision :wink:
 
WRInaute passionné
idem, grand merci même si je n'ai pas tout comprit ^^, alors je vais relire jusqu'à ce que j'imprime :).
 
Haut