Peut on garder une variable php en mémoire?

Peut on garder une variable php en mémoire? - PHP - Programmation

Marsh Posté le 03-05-2013 à 10:36:07    

Bonjour à tous,
 
Je suis en train de créer un système d'Upload tout simple.
 
Voici le formulaire d'upload:
 

Code :
  1. <form method="POST" action="recupimage.php" enctype="multipart/form-data">
  2.    
  3.                 <input type="hidden" name="MAX_FILE_SIZE" value="15728640">
  4.                 <label for="photo">Fichier image(tous formats | max. 15 Mo) :</label><br />
  5.                 <input type="file" name="photo">
  6.                 <input type="submit" name="envoyer" value="Envoyer le fichier">
  7. </form>


 
Voici la fonction php:
 

Code :
  1. <?php
  2. $inc=1;
  3. $dossier = 'style/image/photo';
  4. $taille_maxi = 15728640;
  5. $taille = filesize($_FILES['photo']['tmp_name']);
  6. $extensions = array('.png', '.gif', '.jpg', '.jpeg');
  7. $extension = strrchr($_FILES['photo']['name'], '.');
  8. //Début des vérifications de sécurité...
  9. if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
  10. {
  11.     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
  12. }
  13. if($taille>$taille_maxi)
  14. {
  15.     $erreur = 'Le fichier est trop gros...';
  16. }
  17. if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
  18. {
  19.  
  20.      if (empty($save))
  21.             {
  22.                 $save = $inc;
  23.                 $save++;
  24.                 echo $save;
  25.             }
  26.         else
  27.             {
  28.                 $save++;
  29.             }
  30.             
  31.         ;
  32.  
  33.     if(move_uploaded_file($_FILES['photo']['tmp_name'],"{$dossier}/{$save}.jpg" )) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
  34.     {
  35.          echo 'Upload effectué avec succès !';
  36.     }
  37.     else //Sinon (la fonction renvoie FALSE).
  38.     {
  39.          echo 'Echec de l\'upload !';
  40.     }
  41. }
  42. else
  43. {
  44.     echo $erreur;
  45. }
  46. ?>


 
Le but de mon upload est de donner comme nom aux fichiers uploadés un chiffre qui s'incrémente à chaque nouveau fichier uploadé.
Exemple: le premier fichier s’appellera "1.jpg", le deuxième "2.jpg" etc...
 
Voici mon code qui incremente
 

Code :
  1. if (empty($save))
  2.             {
  3.                 $save = $inc;
  4.                 $save++;
  5.                 echo $save;
  6.             }
  7.         else
  8.             {
  9.                 $save++;
  10.             }
  11.             
  12.         ;


 
Problème, les variables sont réinitialisées à chaque chargement de page, rendant mon incrémentation obsolète...
 
Y aurait-il un moyen de stocker des variables php en mémoire ou quelque chose?  
La seule idée qui me vient en tête serait de stocker à chaque upload la valeur incrémenté dans un fichier texte .

Reply

Marsh Posté le 03-05-2013 à 10:36:07   

Reply

Marsh Posté le 03-05-2013 à 11:28:55    

salut
 
logique tu remet ta val $inc à 1 a chaque utilisation :)
tu as 2 possibilitées :
fichier txt ou aller controler le nom du dernier fichier upload et lui incrementer 1 .
mais bon le plus simple c'est le fichier txt
et lire ton fichier et le charger dans $inc

Reply

Marsh Posté le 03-05-2013 à 11:51:39    

Citation :

salut  
 
logique tu remet ta val $inc à 1 a chaque utilisation :)  
tu as 2 possibilitées :  
fichier txt ou aller controler le nom du dernier fichier upload et lui incrementer 1 .  
mais bon le plus simple c'est le fichier txt  
et lire ton fichier et le charger dans $inc


 
Oui j'ai utilisé un fichier texte et le moins qu'on puisse dire c'est que c'est relativement simple et efficace http://forum-images.hardware.fr/icones/message/icon7.gif .

Reply

Marsh Posté le 03-05-2013 à 13:46:27    

Pourquoi ne pas nommer le fichier uploadé selon sa somme md5 ou sha1 comme le font beaucoup de script ?
 
De plus cela éliminera les attaques du type robot/user qui aspire/regarde toutes les images simplement en incrémentant, c'est utile sauf si tes images ne sont pas privés.
Comme théoriquement tu devrait ne pas avoir avoir de collision de hash tu peux nommer tranquille. Autre avantage si un gars réupload la même image tu la stocke pas (puisque t'as déjà un fichier avec la même somme) et tu lui donne juste le bon nom.
 
 
Une autre solution pour éviter les aspiration et en plus sans fichier, tu fais un nombre aléatoire, tu regarde si c'est déjà pris et tu refais un autre nombre si déjà existant.


Message édité par beridoxy le 03-05-2013 à 13:50:04
Reply

Marsh Posté le 03-05-2013 à 14:12:42    

Citation :

Pourquoi ne pas nommer le fichier uploadé selon sa somme md5 ou sha1 comme le font beaucoup de script ?  
 
De plus cela éliminera les attaques du type robot/user qui aspire/regarde toutes les images simplement en incrémentant, c'est utile sauf si tes images ne sont pas privés.  
Comme théoriquement tu devrait ne pas avoir avoir de collision de hash tu peux nommer tranquille. Autre avantage si un gars réupload la même image tu la stocke pas (puisque t'as déjà un fichier avec la même somme) et tu lui donne juste le bon nom.  
 
 
Une autre solution pour éviter les aspiration et en plus sans fichier, tu fais un nombre aléatoire, tu regarde si c'est déjà pris et tu refais un autre nombre si déjà existant.


 
 
Ton idée semble vraiment bien mais je ne comprend malheureusement pas ce qu'il faut faire, je suis encore débutant dans la création de site donc autant te dire que je débute sur le php et ses fonctions :)

Reply

Marsh Posté le 04-05-2013 à 12:04:31    

Tu prends le nom du fichier filé par l'utilisateur et tu transformes ce nom en md5 via la fonction md5(). Marche aussi avec sha(). Au passage, pour résoudre le pb des fichiers ayant le même nom, tu peux faire un md5($Filename.time()); Comme ça, t'es tranquille ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed