Trop de redirections

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Trop de redirections

par lux » 26 oct. 2008, 13:48

Je voulais juste dire que j'ai résolu mon problème sur l'idée FJA.

Un traitement en AJAX délocalisé dans un autre fichier PHP, avec en bonus une fenêtre d'avancement.
J'ai testé hier soir, il m'a redimensionné 100 images de 4 Mega en 1h30, sans que le script ne s'arrête.

Ça marche mais c'est pas super rapide. De toute façon les images mises par les clients seront déjà redimensionnées. Les images de 4 Megas c'était pour voir ce que le script avait dans le ventre ! :P

Je mets résolu donc

par lux » 13 oct. 2008, 21:53

Non non, j'avais déjà réduit la taille de chaque image de 4Mo à 500ko dès le départ, avant de lui demander de réduire.

Bon ben je vais tester comme ça je crois. Faudra juste mettre un contrôle sur la dimension des images au lancement du script.

par Hywan » 13 oct. 2008, 21:34

Dans ce cas, oui, ça passe normalement.
Et pour les outils dans le genre galerie, tu ne peux verser qu'une image à la fois, pas trop lourde etc. Tu dois pré-mâcher le travaille quand même ; il n'y a pas de recette miracle.

par lux » 13 oct. 2008, 20:35

Dommage j'ai pas accès aux CronJobs ...

Mais je me demande, y a des système de galerie qui proposent aussi ce genre de systèmes, ils font comment eux ?

Sinon, je vois une autre solution : l'user doit dimensionner ses images sur son ordi, et le script ne créera que des vignettes. Me demande si ça peut passer niveau performances :?:

par Hywan » 13 oct. 2008, 19:51

Tu ne peux pas traiter 100 photos d'un coup avec PHP. L'idéal serait de les traiter par paquet, donc via un cronjob par exemple : on traite les 5 plus vieilles toutes les 10 minutes (c'est un exemple).

Je ne vois rien qui puisse t'aider aux vues de tes configurations, tout en restant dans PHP … Et même via Javascript couplé à Ajax : l'utilisateur va attendre 3 plombes, c'est pas l'idéal. Imagine une coupure de courant ou qu'il ferme son navigateur, comment reprendre le traitement ?

par lux » 13 oct. 2008, 19:41

Bah je propose 2 modes : mode upload et mode FTP.

Le mode Upload, c'est un système ou les photos sont redimensionnées dès leur upload. Pas mal, mais bon vu que si la photo fait 3 Mo, faut le temps d'upload, plus le temps de redimensionnement. Mais faisable sans plantage.

Par contre si la personne veut mettre 100 photos dans la galerie, je propose un mode FTP ou ellle mets 100 photos dans un dossier ftp, et hop import direct (bien sur avec un choix avec des checkboxes pour sélectionner les photos voulues etc...)

par Victor BRITO » 13 oct. 2008, 19:31

Et si tu traitais le redimensionnement des images au moment de leur upload ?

par lux » 13 oct. 2008, 18:53

Ce que j'essayais de faire justement, en découpant le script en petits bouts.

Mais bon je crois que je vais me pencher sur la solution Ajax, c'est pour une partie Admin, donc je préciserai bien au client qu'il faut activer Javascript :P

par Hywan » 13 oct. 2008, 18:37

C'est là le problème : il ne faut pas traiter les 70 photos d'un coup ; même Photoshop a du mal, alors PHP …

Il faut que — dans ton contexte — tu trouves un moyen de traiter des paquets (ou lots) d'images plus petits, i.e. en plus petites quantités à la fois.

par lux » 13 oct. 2008, 16:46

Heu j'ai aucun while, je lis pas des données de ma base de donnée.

Je liste dans un array les chemins vers toutes les photos dans un dossier FTP, et je boucle dessus avec foreach. Pour chaque lien je crée un thumbnail et je redimensionne la photo.
Juste ces 2 opérations, avec 70 photos, il me faut 5 minutes.

(et la j'ai pas encore traité les données relatives à chaque texte associées à une photo (donc insert en bdd).

par Nagol » 13 oct. 2008, 14:15

J'ai un array qui contient les images, je fais un foreach. Au debut du foreach, je déclare un time(). Dans chaque boucle du foreach je vérifie si la différence de temps n'a pas dépassé 20 secondes. Si elle dépasse, je fais un header("Location:galerie.php?pause=do");exit; et je mets toutes les données dans une SESSION (array, et surtout le $i (compteur)).

Je reprends le script sur la même page, juste en reprenant les données dans la SESSION, donc je récupère l'endroit ou je m'arrêtais, et je relance le foreach au bon endroit. Rien de bien compliqué, ça me permets de faire 5 minutes d'exécution au lieu de 30 secondes.

Bon, je dois encore optimiser légèrement les accès à la BDD, mais c'est surtout le redimensionnement des images qui ralentit le truc ... Je sais que je peux encore optimiser, mais je sais que si je dois traiter 300 photos, même en optimisant, je dépasserai facilement les 5 minutes. :wink: :wink:
un array trop gros en php -> mangeage de ram pertes dramatiques de perf. met ton code directement dans le while($res = mysqli_fetch_assoc($qry)) que tu dois avoir quelquepart et je te parie que tu va beaucoup gagner en temps et en ram.

par Victor BRITO » 13 oct. 2008, 14:13

Ton script est-il suffisamment optimisé pour libérer de la ressource mémoire ?

par lux » 12 oct. 2008, 21:06

Ha non, pas de bagarre Javascript-Pas Javascript ici, je vous l'interdis ! :P

Perso je préférerai une solutions sans, mais la je vois vraiment pas d'alternative.

par Hywan » 12 oct. 2008, 21:01

L'avantage c'est que si le client n'a pas Javascript, il ne pourra jamais traiter les images, c'est bien aussi remarque.

par FJA » 12 oct. 2008, 18:47

Humm… je pense que si tu passe par AJAX pour gérer ton script ca devrai être bon :
  • Tu envoie un 1ere requete avec le nombre d'image à traiter
  • Et ensuite tu envoie un requete pour demander le traitement d'une image
  • Ensuite tu récupère le message comme quoi l'image a fini d'être traité
  • Tu envoie une requete pour passer à l'image suivante
  • et ainsi de suite
L'avantage c'est que tu peut avoir un aprecu direct de l'évolution du traitement et que le script PHP ne fonctionne que pendant la durée d'une image