Intérrogation sur unset() ?


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Intérrogation sur unset() ?

Message le Jeu Avr 08, 2010 12:09

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: Tout sélectionner
<?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:

honolulu
WRInaute impliqué
WRInaute impliqué
 
Messages: 942
Inscription: 8 Nov 2005

Re: Intérrogation sur unset() ?

Message le Jeu Avr 08, 2010 12:20

unset = http://fr2.php.net/manual/fr/function.unset.php
isset = http://fr2.php.net/manual/fr/function.isset.php

Si une variable a été détruite avec la fonction unset(), la fonction isset() renverra FALSE.


rtfm


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Intérrogation sur unset() ?

Message le Jeu Avr 08, 2010 12:43

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 ?


e-kiwi
Modérateur
Modérateur
 
Messages: 15617
Inscription: 23 Déc 2003

Re: Intérrogation sur unset() ?

Message le Jeu Avr 08, 2010 12:48

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.

honolulu
WRInaute impliqué
WRInaute impliqué
 
Messages: 942
Inscription: 8 Nov 2005

Re: Intérrogation sur unset() ?

Message le Jeu Avr 08, 2010 12:57

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:


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Intérrogation sur unset() ?

Message le Jeu Avr 08, 2010 14:57

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: .


anemone-clown
WRInaute passionné
WRInaute passionné
 
Messages: 1277
Inscription: 11 Nov 2007

Re: Intérrogation sur unset() ?

Message le Jeu Avr 08, 2010 17:45

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)

honolulu
WRInaute impliqué
WRInaute impliqué
 
Messages: 942
Inscription: 8 Nov 2005

Re: Intérrogation sur unset() ?

Message le Jeu Avr 08, 2010 18:18

anemone-clown a écrit: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:


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Intérrogation sur unset() ?

Message le Jeu Avr 08, 2010 19:49

idem, grand merci même si je n'ai pas tout comprit ^^, alors je vais relire jusqu'à ce que j'imprime :).


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités