class et else

Mammouth du PHP | 1668 Messages

12 mai 2008, 12:26

Bonjour a tous et toutes,
Je suis entraint de réalisé un classe qui aura pour but de gérer des fichiers médias (photos, musique, Vidéos)

Alors que je venait de finir cette classe je m'aperçut qu'elle était assez conséquente, et donc je décide de la scinder, voilà la class qui a un problème :
<?php
	private function verification(){
		if (intval(addslashes(filesize($this->url)))==$donnees->poid) {
			$this->poid=$donnees->poid;
			if (htmlentities(md5_file($this->url))==$donnes->md5 AND htmlentities(sha1_file($this->url))==$donnes->sha1) {
				$this->sha1=$donnees->sha1;
				$this->md5=$donnees->md5;
				if (intval(addslashes(fileatime($this->url)))==$donnes->date_fichier) {
					$this->date_fichier=$donnes->date_fichier;
					if ($this->type=="image") {
						$this->dimensions_reeles=getimagesize($this->url);
						if ($this->dimensions_reeles[1]==$donnees->hauteur AND $this->dimensions_reeles[0]==$donnees->largeur) {
							$this->hauteur=$donnees->hauteur;
							$this->largeur=$donnees->largeur;
							$this->modifie=0;
						}// Si ses dimensions sont correctes
						else {
							$this->modifie=1;
						}
					}// Si c'est une image
					else {
						$this->modifie=0;
					}
				}// Date
				else {
					$this->modifie=1;
				}
			}// Empreintes
			else {
				$this->modifie=1;
			}
			else { // un else oublié ??? (ligne 104)
				$this->modifie=1;
			}
		}//Poid
		else {
			$this->modifie=1;
		}
	}
}
?>
Le message d'erreur est le suivant :
<b>Parse error</b>: parse error, unexpected T_ELSE in <b>***ichiers.class.php</b> on line <b>104</b><br />
J'ai déjà essayé plein de chose en vaint :roll:

Avez vous la solution ???

Par avance merci...

PS : J'ai indenté automatiquement avec ZDE
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Mammouth du PHP | 693 Messages

12 mai 2008, 12:39

Tu as pas un else en trop ?
           else { 
                $this->modifie=1; 
            } 
            else { // un else oublié ??? (ligne 104) 
                $this->modifie=1; 
            } 
Ils sont identité de la même facon et ils font la même chose...

Mammouth du PHP | 1668 Messages

12 mai 2008, 12:46

Oui, merci, ça remarche maintenant :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 422 Messages

12 mai 2008, 14:07

Tu viens de l'expérimenter, il ne faut pas imbriquer autant de niveaux de if. C'est extrêmement difficile à tester et c'est extrêmement difficile à maintenir (imagine que tu sois obligé de faire des modifs sans 6 mois -- ou pire, que quelqu'un d'autre sit obligé de faire des modifs).

3 niveaux d'imbrications représentent 2^3 = 8 cas à traiter, ce qui est le maximum que peut gérer la mémoire à court terme d'un cerveau humain à peu près normal. Là tu es à 5 niveaux avec deux AND, soit 128 cas à tester.

Soit tu scindes ton code pour faire des fonctions, soit tu inverses les sens des tests et tu gères les cas un par un
private function verification(){
  if (intval(addslashes(filesize($this->url)))!=$donnees->poid) { 
    $this->modifie=1;
    return();
  }
  $this->poid=$donnees->poid; 

  if (htmlentities(md5_file($this->url))!=$donnes->md5 OR htmlentities(sha1_file($this->url))!=$donnes->sha1) { 
    $this->modifie=1; 
    return();
  }
  $this->sha1=$donnees->sha1; 
  $this->md5=$donnees->md5; 
...

}
Et comme ça, tu peux ajouter sans problème 200 tests si tu en as envie, chacun étant indépendant des autres.

Eléphant du PHP | 422 Messages

12 mai 2008, 14:14

Autres points :
1) tu fais "intval(addslashes(filesize()" : pourquoi ?
filesize renvoie un entier : addslashes n'ajoutera donc rien il ne sert donc à rien de reconvertir en entier

2) tu fais "htmlentities(md5_file(" : pourquoi ?
md5_file renvoie des caractères hexadécimaux (0 à 9, A à F). Il n'y a aucun caractère spécial du HTML et htmlentities ne sert à rien

Mammouth du PHP | 1668 Messages

12 mai 2008, 15:06

chacun sa méthode :roll:
Je me méfis de tout donc je fais des choses inutiles, ça me permet d'avoir plus confiance même si ça ne changera rien :roll:
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 422 Messages

12 mai 2008, 20:32

Dans ce cas-là, n'utilise pas la fonction filesize, mais plutôt une boucle avec fseek qui te permettra de compter un par un les octets du fichier. :?
et je pense que tu devrais te méfier des fonctions de génération du md5 ou du sha1. un conseil : réécris-les en assembleur !

Mammouth du PHP | 1668 Messages

12 mai 2008, 20:37

Super je vais même réécrire PHP en C++
Mon année de cryptographie n'aura pas été vaine :roll:

Bah je me méfis de tout : "Tout le monde ment" qui sait a qui appartient cette phrase 8-)
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 422 Messages

12 mai 2008, 22:53

Tu aurais peut-être du faire une année d'algorithmique plutôt.
Bon, écoute, que ce soit à propos des bases de données ou de la programmation, tu as l'air d'en savoir beaucoup plus que les autres (ou du moins le croire) et tu n'as pas l'air du genre à accepter les conseils. Donc, je m'arrête là et je te laisse programmer de la façon que tu veux avec des if trop nombreux pour que tu t'en sortes et des fonctions qui ne servent à rien.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 mai 2008, 22:58

Allez caroube, respire.

Il y a plein de gens sur ce forum qui sont ouvert aux conseils et ça serait dommage de te dégouter pour si peu.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 1668 Messages

13 mai 2008, 09:53

Ca va partir en flood mais, tout le monde me prodigue ces conseils, je les écoutes, je les retiens, mais voilà.
Ce ne sont que des conseils pas des ordres...
C'est un peu comme si quelqu'un que tu ne connais pas, qui ne te paye pas te demander de coder un gros site en procédurale...
Moi, mon stéréotype, je surprotège, je ne commente pas mon code, je code très vite...
Chacun le sient, je respecte le votre, respectez le mien, même si il est idiot et je le conçoit :roll:
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

13 mai 2008, 10:05

Tu as bien compris le truc, nous ne donnons que des conseils.

Mais, quand tu nous dis "chacun sa méthode", on a franchement l'impression qu'on est HS de pas protéger chaque transfert de variable.

Sinon, sache que les principes de protections ont un cout en terme de temps d'exécution. Que si tu développes un petit site collaboratif, ça ne se verra peut être jamais, mais que si tu est sur une application de plus grosse envergure, ça va finir par se voir.

Et sinon, protéger pour protéger, c'est aussi inutile que de faire
$nb = 12;
for($i=0; $i<5; $i++)
{
  $nb+1;
}
parce que tu penses que le + n'est pas protégé. C'est une caricature, mais franchement, c'est dans la même idée.

Que tu protège tout ce qui arrive de l'extérieur est une excellente chose. Que tu protèges les chaines à l'intérieur de ton application, pourquoi pas, même si j'en vois moins l'utilité, du moins selon l'application.
Que tu protèges avec un addslashes() des valeurs entières, je trouve ça inutile et paranoïaque.

Maintenant, il est clair que je cherche à te convaincre, mais tu restes le maître des clés et c'est toi qui décide pour ton application.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 1668 Messages

13 mai 2008, 10:40

Ok, tu as gagné je vais revoir mes 784 lignes de codes (vive la POO :roll: )
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 5924 Messages

13 mai 2008, 11:18

En même temps ca va pas être super long si c'est que 784 lignes…

Mammouth du PHP | 1668 Messages

13 mai 2008, 12:17

En même temps c'est pas toi qui le fait...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol