Page 1 sur 1

Probleme transition if => switch

Posté : 18 mai 2006, 12:05
par Arthur26
Bonjour,

Pour des soucis de rapidité et pour que ce soit plus "propre" j'ai remplacé dans mon code 19 instruction if/elseif/elseif/elseif par
switch($ext)
    case '.doc' || '.xls' || '.pps':
           traitement;
           break;
    case '.pdf':
           traitement;
           break;
    case '.dll':
           traitement;
           break;

Avec la structure if/elseif cela marché tres bien mais desque je suis passé au switch et au case il ne m'affiche que les document en .doc, .xls ou .pps
On dirait qu'apres avoir trouvé un 'office' il execute le 'case' correspondant et s'il rencontre un autre format de fichier il ne fait rien...

J'ai bien verifié que mon ext soit '.qqchose'
elseif(is_file($file)){
	$ext = substr($file,strpos($file,'.'));
Je ne voit pas pourquoi il ne prendrai que la premiere instruction...
Merci

Posté : 18 mai 2006, 12:13
par ouckileou
Regarde dans la doc l'exemple 16--26 pour avoir plusieurs conditions pour une instruction :
http://fr.php.net/switch

Des fois que c esoit tes '||' qui gênent

Posté : 18 mai 2006, 12:22
par Ryle
Des fois que ce soit tes '||' qui gênent
Parce que t'as un doute pour que ça ne soit pas ça toi ? ;)

Bon il manque peut être également les acolades du switch, mais les "ou" en plein milieu d'un case.... :)

Posté : 18 mai 2006, 14:09
par Arthur26
Comem indiqué j'ai explosé les || donc maintenant une seule possibilité par case est possible.
Par contre la variable $ext est de type .ext ou ext peut etre dll, doc, ini, pdf etc...
Deuxièmement si j'enleve les '.doc', que je le transforme en .doc seulement php m'engueule avec un parse error >.<'

Voici mon code modifié, et apparament ca marche mais si je revien a la structure en if elseif, que cela m'apportera-t-il de mieux ? de moins bien ?
        elseif(is_file($file)){
			$ext = substr($file,strpos($file,'.'));
			$datecrea = Date("d-m-Y",filectime($file));
			$jourcrea = substr($datecrea,0,2);
			$moiscrea = substr($datecrea,3,2);
			$anneecrea = substr($datecrea,6,4);
			Switch ($ext){
				case '.doc' :
					$size += filesize($file);
					$j++;
					break;

				case .xls:
					$size += filesize($file);
					$j++;
					break;

				case .pps:
					$size += filesize($file);
					$j++;
					break;

				case '.ppt':
					$size += filesize($file);
					$j++;
					break;

Merki

Posté : 18 mai 2006, 14:12
par Arthur26
Bien sur il fallait lire '.xls' et '.pps' et non .xls et .pps

Désolé

Posté : 18 mai 2006, 14:18
par ouckileou
Je ne comprends pas, pourquoi est-ce que tu veux enlever les guillemets ?

Et puis, tu peux garder plusieurs possibilités pour un même cas :
Switch ($ext){
                case '.doc' :
                case '.xls':
                case .pps:
                case '.ppt':
                    $size += filesize($file);
                    $j++;
                    break;
                case '.pdf' : echo 'ceci est un fichier PDF'; break;
                default : echo 'extension inconnue';
}

Posté : 18 mai 2006, 14:26
par Arthur26
Lol pour les guillemets,

j'avais (très) mal compris un post...

Ca a l'air de marché ac ta manière donc je laisse comme ca, mais je vais quand même verifié s'il ne m'oublie aucun fichier.

Merki

Posté : 18 mai 2006, 14:32
par ouckileou
C'est à toi de lister les extensions que tu veux traiter en fait
Pour résumer :
switch ($ext) {
   case '.doc' :
   case '.xls' : 
   case '.ppt' : // si l'extension est .doc ou .xls ou .ppt
      echo 'C\est un fichier Microsoft Office'; break;
   case '.pdf' : // si l'extension est .pdf
      echo 'C'\est un fichier Adobe PDF'; break;
   default : // pour toutes les autres extensions qu'on pourrait rencontrer
      echo 'L\'extension est inconnue';
}

Posté : 18 mai 2006, 15:00
par Arthur26
Oki, merci du tips

Ca marche, j'arrive a lister 97% des fichiers de mon disque dur, maintenant il me reste la partie réseau. Scanner le contenu d'un serveur de donnée pour prevenir les risques de saturation...

Prob Résolu, yeah :lol: