Bug de phpThumb seulement sous Firefox

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par lambi521, 5 Février 2015.

  1. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    Bonjour à tous,

    J'ai identifié un bug de phpThumb qui arrive seulement si on navigue sous Firefox

    Je n'ai pas trouvé de solution pour corriger cela et je ne sais pas de quoi ça vient, un peu d'aide serait la bienvenue

    Voici la page de démo de phpThumb :
    http://phpthumb.sourceforge.net/demo/demo/phpThumb.demo.demo.php

    Si vous visitez cette page avec IE ou Chrome, normalement toutes les images s'affichent
    Si vous la visitez avec Firefox, les images ayant le paramètre "fltr" s'affichent en erreur (ctrl F + fltr pour les trouver)

    Note: Je suis sous FF 35.0.1 + windows 7
     
  2. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    Même erreur sous GNU/Linux avec la vers 35.0.1.
    Par contre ça passe bien sous Firefox 29.
     
  3. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    Donc ça viendrais de la nouvelle version de Firefox... Une idée pour corriger cela ? J'ai cherché sur le net mais personne n'en parle, pourtant phpThumb est très utilisé sur beaucoup de sites et de CMS

    J'ai testé sous Safari et les images fonctionnent. Par contre avec Chrome sur une tablette Android, même erreur qu'avec FF 35.0.1 :(

    Si il existe un autre système similaire à phpThumb je suis preneur... En plus je suis pas fan des URLs de phpThumb, on peut facilement retrouver l'image d'origine sans le watermark
     
  4. loubet
    loubet WRInaute impliqué
    Inscrit:
    19 Février 2003
    Messages:
    793
    J'aime reçus:
    0
    possible que cela demande trop d'images au serveur en même temps, et le serveur est configuré pour renvoyer une erreur 403 pour éviter la surcharge. cela fonctionnerait donc avec un seul appel.
     
  5. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    Vu la page remplie d'image et le temps de chargement c'est ce que je me suis dit aussi donc j'ai attendu que la page soit finie de charger, j'ai copié l'url d'une image plantée en mode debug et je l'ai collé dans un autre onglet.
    Résultat nada même avec Ctrl + F5 plusieurs fois.
     
  6. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    Non non ça marche très bien, j'ai affiché mes 7000 images sur une même page en PHP sous Chrome :lol:

    Après avoir pas mal galéré j'ai isolé le problème : utilisation du filtre sous FF = image d'erreur (avec erreur 403 effectivement)

    D'ailleurs ces erreurs 403 son répertoriées dans mon GWT, ce qui veut dire que GGbot a le même problème que FF

    Autre chose étrange, ça marche impec avec Chrome sur PC mais pas sur Android...
     
  7. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    Cache du navigateur vidé ?
     
  8. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    Bien sûr Zeb :)

    D'ailleurs en parlant de cache: Lors du 1er appel de l'image, phpThumb la génère et la met en cache dans un dossier sur le serveur. Etant donné que j'ai tout généré sous Chrome, toutes les images ont donc été mises en cache.

    Dans ce cas, pourquoi lorsque je fais le même appel depuis FF, il essaye de me "re-générer" l'image (ce qui provoque l'erreur 403) plutôt que de me servir l'image déjà créée ?
     
  9. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    Dans le php.ini du serveur faut commenter la ligne 613 :
    :D
     
  10. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    Je pense que c'est un souci au niveau de la génération de la page qui liste toutes les images.
    En examinant les adresses URL de FF 35 et FF 29, on voit une différence entre les deux :
    On peut voir que sous Firefox 35, les crochets sont transformés en entité html.
    Au niveau PHP, on ne récupère donc plus "fltr" sous forme de tableau.

    D'un autre coté, dans FF 35 on voir bien l'entête passer correctement avec les [], ce qui annulerait mon analyse ^^

    Ce qu'il faudrait surtout, c'est voir les logs au niveau serveur.
     
  11. noren
    noren WRInaute accro
    Inscrit:
    8 Avril 2011
    Messages:
    2 903
    J'aime reçus:
    14
    Alors ce topic est intéressant car j'ai également détecté un problème avec les images et firefox mais qui date a mon avis depuis 1 ou 2 MAJ antérieurs et qui ne semble pas résolu.

    Sur mon site je crée les thumbs a la volée en utilisant les fonctions GD (je ne sais pas si c’est le cas de phpThumb), si le thumb n'existe pas .Chose étrange firefox met un certain temps avant de m'afficher correctement les images nouvellement créées.
    Un coup il les affiche, un coup non (pourtant dans le code html ca pointe bien vers le thumb et celui-ci existe bien), et il faut plusieurs refraiche avant que ça se stabilise et que l'image apparaisse bien et définitivement sur le site.

    Je ne sais pas si le problème est lié mais c’est peut être une piste.
    PS: j'ai évidemment vidé ma cache :wink: et testé avec chrome et IE (oui oui IE)
     
  12. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    J'ai la flemme de chercher mais existe t-il un bout de code que je pourrai tester sur mon serveur ? Ce serait plus pratique pour regarder ce qu'il se passe.
     
  13. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    Super les mecs, je ne suis plus seul :D

    @Blount: Ta piste est TRES intéressante. Si ça se trouve, le nouvelle version de FF "encode" les crochets et du coup, le hash présent dans l'URL de l'image n'est plus bon, et donc phpThumb renvoie l'image d'erreur en 403. J'ai regardé quand était renvoyée l'erreur 403 dans le code, et c'est en cas d'erreur de hash ou d'image source inexistante (chemin incorrect etc). Du coup ça pourrait collé, je vais creuser !

    @noren : Effectivement phpThumb fonctionne exactement de la même façon et utilise GD, j'ai même installé ImageMagick sur notre Apache pour que ce soit plus rapide. Ton problème ressemble plus à un problème de mémoire, image source trop grande, serveur trop faible :?: Ou alors ton cache est plein ou mal paramétré ? Avec phpThumb, j'ai un fichier de config où je peux mettre une taille d'image max pour empêcher que le serveur plante, car le traitement d'image à la volée consomme bcp de mémoire. J'ai également des fonctions pour paramétrer le cache en fonction de l'espace disque, du nombre d'images etc...
     
  14. noren
    noren WRInaute accro
    Inscrit:
    8 Avril 2011
    Messages:
    2 903
    J'aime reçus:
    14
    @lambi521 : Les images que je redimensionne font rarement plus de 100ko à la base et environ 20-30 ko une fois redimensionnée. même lorsque je redimensionne une seule image j'ai ce soucis, et il est présent qu'avec firefox.
    Pour la cache j'ai essayé en la vidant complètement. Je ne fais (ferais) pas plus de 4-5 redimensionnements par jour, donc a la base rien d'impressionnant et d'insurmontable pour n'importe quel serveur et pour la cache. Je suis pour le moment en local avec une très bonne machine :wink:
    Pour moi c’est un réel mystère d'autant plus que ça touche que Firefox.Possible qu'il n'y ai aucun lien avec ton problème, mais ces 2 problèmes avec les images redimensionnées et firefox sont quand même étonnant.
     
  15. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    Oui ça c'est normal et ça date de la nuit des temps j'ai aussi ce souci qui n'en est pas franchement un. Ce n'est pas lié a GD ou autre techno vu que je le constate avec un script de miniature perso qui utilise imagick direct depuis le shell.

    Firefox se comporte comme si une ressource (image dans ce cas) non délivrée dans une temps "acceptable" est ignorée. Perso je génère les miniatures par 10 ou 15 et si le script répond pas tout de suite bah firefox ignore l'affichage. en revanche si "bouton de droite" je fais "actualiser l'image" ça passe elle apparait. si avant cela je regarde sur le serveur pour voir si la miniature a été créée je la vois bien a sa place.

    Le truc c'est qu'avec le refresh si tu impose le rechargement des ressources elles finissent par arriver puisque une fois le cache généré, ou la miniature créée, le serveur met moins de temps a répondre.
     
  16. noren
    noren WRInaute accro
    Inscrit:
    8 Avril 2011
    Messages:
    2 903
    J'aime reçus:
    14
    Merci pour ta réponse ça me rassure, après je verrais bien ce que ca donne en prod et si ça pose problème.
     
  17. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    @Blount : J'ai regardé mes erreurs 403 dans GWT et les crochets sont encodés comme tu l'indiques. Pas de doute que l'erreur vienne de là.

    Quand je regarde le code source de ma page sous FF, le lien vers l'image comporte bien les crochets non encodés. Mais si je fais clique droit + copier l'adresse du lien, et que je le colle dans la barre d'adresse (ou même dans un fichier texte), le lien a les crochets encodés "fltr%5B%5D=wmi".

    Si je fais la même manip sous Chrome, les crochets sont affichés normalement fltr[]=wmi.

    Bug identifié, reste plus qu'à le corriger... Une idée ?
     
  18. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    Si le bug est produit par firefox tu n'as aucune chance de le corriger. Et même si tu l'identifiait sur les src de FF et que tu recompilais tu serait le seul a ne pas l'avoir.

    Après quand on ne peut pas toucher au bub on peut peut être le contourner en récrivant ce type d'url ...
     
  19. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    En fait, je ne pense pas que cela vienne des crochets.
    En installant chez moi, je vois dans les 2 cas les mêmes données dans $_GET.

    Par contre, chose intéressante, j'ai aussi le 403 en utilisant WGET.

    J'ai été malade plusieurs jours, je n'ai donc pas pu y regarder plus sérieusement que ça.
     
  20. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    Ça y est, j'ai percé le mystère. Comme quoi, quand on est en forme, ça change tout. J'ai trouvé en quelques minutes ^^
    En fin de compte, ce sont bien les crochets les coupables.

    Pour commencer, j'ai installé le tout sur ma machine, plus simple pour déboguer.
    Ensuite, activation du mode debug dans phpThumb.config.php :
    PHP:
    <span class="syntaxdefault">$PHPTHUMB_CONFIG</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'disable_debug'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// ligne 42, passer de true à false          &nbsp;</span><span class="syntaxdefault"></span>
    Ensuite, on se rend à l'URL de l'image qui plante. Dans mon cas, j'ai pris la #6.
    Là, plein de truc s'affiche à l'écran. Pour Firefox 35, on a ceci :
    Au moins, ça confirme une erreur, car cette partie n'est pas présente dans Firefox 29.
    Inutile d'aller à la ligne 4070, il n'y a rien à voir :D

    Je fais par contre une recherche sur "ERROR: invalid hash" pour trouver l'origine de l'erreur. Résultat, il faut aller dans phpThumb.php à la ligne 205 :
    PHP:
    <span class="syntaxdefault"><br />if </span><span class="syntaxkeyword">(!empty(</span><span class="syntaxdefault">$phpThumb</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">config_high_security_enabled</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    if </span><span class="syntaxkeyword">(empty(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'hash'</span><span class="syntaxkeyword">]))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        $phpThumb</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">config_disable_debug </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// otherwise error message won't print<br /></span><span class="syntaxdefault">        $phpThumb</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">ErrorImage</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'ERROR: missing hash'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> elseif </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">PasswordStrength</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$phpThumb</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">config_high_security_password</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword"><</span><span class="syntaxdefault"> 20</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        $phpThumb</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">config_disable_debug </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// otherwise error message won't print<br /></span><span class="syntaxdefault">        $phpThumb</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">ErrorImage</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'ERROR: $PHPTHUMB_CONFIG[high_security_password] is not complex enough'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> elseif </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'hash'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!=</span><span class="syntaxdefault"> md5</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">str_replace</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$phpThumb</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">config_high_security_url_separator</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'hash='</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'hash'</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> </span><span class="syntaxstring">''</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> urldecode</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'QUERY_STRING'</span><span class="syntaxkeyword">])).</span><span class="syntaxdefault">$phpThumb</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">config_high_security_password</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'HTTP/1.0 403 Forbidden'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">        sleep</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">10</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// deliberate delay to discourage password-guessing<br /></span><span class="syntaxdefault">        $phpThumb</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">ErrorImage</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'ERROR: invalid hash'</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// ELLE EST ICI LA LEVÉ D'ERREUR<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br />}<br /></span><span class="syntaxdefault"> </span>
    On voit aussi le sleep(10), je me demandai pourquoi l'affichage prenait autant de temps, je comprend …

    On voit dans le 3ème IF un contrôle sur le HASH. L'erreur se trouve dans $_SERVER['QUERY_STRING'] qui contient les query string sous forme de chaîne de caractères (ex: truc=machin&bidule=1).
    FF 35 indique les crochets encodés (%5B%5D) alors que FF 29 les passe sous leur forme normale ([]).
    Contenu pour chaque version :
    En mettant : urldecode($_SERVER['QUERY_STRING'])
    L'erreur disparait et les images s'affichent ;)

    L'autre "solution" est de mettre high_security_enabled à false, mais ce n'est pas conseillé d'après les commentaires du fichier config.

    Par contre, dans $_GET, on retrouve les bonnes données, donc PHP sait traiter les deux formats.

    Je ne sais pas qui est en tord dans cette histoire, mais j'ai eu le même souci avec WGET. Je pense qu'il faut ajouter urldecode dans phpThumb car $_SERVER['QUERY_STRING'] contient le format brut des paramètres d'URL, comme $_SERVER['REQUEST_URI'].
     
  21. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    Blount, tu es mon sauveur !

    J'étais en train de mettre en place un système d'URL rewriting pour ne pas avoir ces crochets, mais du coup j'ai mis en place ta solution et ça marche impec !

    De plus, ça corrige un problème similaire que j'avais identifié : les images avec un espace dans le nom du fichier ne s'affichait pas. J'avais mis la fonction str_replace(' ', '%20', $src) pour corriger cela mais avec ta solution, plus besoin de le faire !

    Merci beaucoup je n'y aurais pas pensé sans toi. Il faudrait reporté cette solution sur la contrib officielle
     
Chargement...
Similar Threads - Bug phpThumb seulement Forum Date
Real time bugué dans Google Analytics ? Google Analytics 28 Octobre 2019
Bugs sur blocs adsense AdSense 7 Septembre 2019
WordPress Avis sur bugzero.fr Demandes d'avis et de conseils sur vos sites 21 Août 2019
Google Search Bug Selecting Unrelated Canonical URLs & Indexing Issues Crawl et indexation Google, sitemaps 26 Avril 2019
Bug Google : désindexation de pages Référencement Google 7 Avril 2019
En-têtes http bugués Administration d'un site Web 6 Février 2019
Bug dans la console analytic? Google Analytics 17 Janvier 2019
VisBug : extension Chrome par Google, pour le développement Google : l'entreprise, les sites web, les services 16 Novembre 2018
Nb d'URL indexées : bug ou incompréhension ? Débuter en référencement 26 Octobre 2018
Search Console bug ? Référencement Google 21 Août 2018
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice