Page 1 sur 1

Upload et resize d'image

Posté : 02 mai 2006, 09:07
par Tictac
Bonjour , vous allez me dire que le sujet est déjà traité dans le forum !lol

Mais je vais expliquer en détails :

Je me trouve avec une site d'immobilier et les administrateurs sont dans la possiblilité d'uploader des photos (10 max)!

Le problème étant que le server ne permet pas de grand timeout et comme je redimensionne les photos pour acquérir en sortie une thumb et une large.

Le temps d'execution est assez grand surtout si je mets les 10 input file sur la meme page !!

J'avais donc comme solutions d'ouvrir un popup d'ajout pour chaque photo qu'ils souhaitent ajouter ! je gagne il me semble 10x plus de temps (si 10 photos) !!

Mais je ne suis pas certain de ce que j'avance !!!

Qqun aurait-il une autre idée ?

Merci d'avance

Posté : 02 mai 2006, 09:49
par Cyrano
Je suggèrerais de limiter à trois image à chaque fois et ensuite ouvrir la possibilité d'en rajouter d'autres par mise à jour, toujours limité à trois.

Autre possibilité : enregistrer les infos de toutes les images dans un tableau et les faire traiter une par une par appel de la page de traitement dans une boucle: de cette manière, la page de traitement n'en manipule qu'une seule et se rapelle elle-même tant qu'il reste des informations dans le tableau.

Posté : 03 mai 2006, 15:33
par Tictac
Cette idée de recharger me parrait pas mal!!

Mais je peux mettre les $_FILES dans un array ?

Ensuite je fais une boucle dans ce genre ?
<?
//Récupérer le nombre photos envoyées
$nb_photo = sizeof($_FILES['photos']);

//Valeur de départ
$start = (!$_GET['photos_nr'])? 0 : $_GET['photos_nr'] ;

//Boucle pour sauver la photo
for($i=$start;$i<$nb_photo;$i++)
 {
  $photo = $_FILES['photos'][$i] ;
       //Traitement de la photo et enregistrement des infos dans la base de                donnée
 ......................

 }
?>
me question, comment faire le refresh de la page avec la suite des mes $_FILES ?

Merci

Posté : 03 mai 2006, 15:38
par Cyrano
Toujours au rayons des suggestions, je n'ai pas testé, mais je mettrais le traitement d'image dans un fichier externe dans une fonction :

Dans la fonction, un comptage du nombre de photos à traiter, le code de traitement d'une photo, et un appel récursif avec en paramètre le nombre de photos à traiter moins 1 : si ce nombre arrive à 0, header vers la page de résultat , sinon, header vers la page de la fonction elle-même

ou quelque chose dans ce goût là.

Posté : 04 mai 2006, 08:10
par Tictac
hello , merci pour tes explications !!
Seulement , je suis chiant ! mais pourrais-tu me schématiser un peu l'explication +- comme j'ai fait au dessus.

Je comprend bcp plus vite de cette manière qu'avec du texte lol ;)

Merci d'avance

Posté : 04 mai 2006, 08:31
par Cyrano
Après réflexion, je ne suis pas sûr que mon idée soit bien bonne : si tu as dix photos à traiter, quelle que soit la manière d'effectuer le traitement, il y aura toujours le délai de téléchargement vers le serveur qui prendra un certain temps.Tu vas donc être obligé de limiter le poids de chaque image à un maximum de max-upload/nombre-de-photos : si max-upload est configuré à 2Mo (par défaut) avec un nombre de photos à 10, ça fait 2048Ko/10 : en gros, maxi 200Ko par photo envoyée : ça va être difficile à faire respecter par l'utilisateur, mais c'est pas impossible.

Ensuite, le schéma très sommaire de l'idée soulevée est le suivant :
/* On vérifie qu'il y a un ou plusieurs fichiers envoyés */
if(isset($_FILES) && !empty($_FILES))
{
    /* On compte combien de photos sont envoyées */
    $nb_photos = count($_FILES);
    /* On envoie ça au traitement */
    traitement($_FILES, $nb_photos);
}
L'appel à la fonction tel que je l'imagine comporte deux paramètres : les fichiers et leur nombre.
Ta fonction traitement() ressemblera à quelque chose comme ceci:
function traitement($images, $nb)
{
    if($nb == 0)
    {
        /* Redirection vers la page de résultat */
        header("Location: resultat.php");
    }
    else
    {
        /* Traitement d'une photo */
        //...
        /* On décrémente le nombre restant à traiter */
        $nb--;
        /* Rappel récursif de la fonction pour la photo suivante */
        traitement($images, $nb);
    }
}
Alors j'émets beaucoup de réserves sur cette idée, il reste des problèmes à résoudre, par exemple que la fonction ne traite qu'une image à la fois et pas deux fois de suite la même. Donc il faudrait peut-être trouver une astuce au niveau de la manière de nommer les champs file du formulaire. :-k

Je te laisse imaginer la suite et comment mettre ça en oeuvre ;)

Posté : 05 mai 2006, 08:05
par Tictac
ok , j'ai bien compris , ta façon de résonner , mais le problème de timeout est tjs présent de cette ma nière , j'opte donc pour un upload photo par photo !!

je te remercie tout de même pour l'explication qui est tjs bonne à prendre.

:oops: Désolé pour le dérangement