Question aux pros de Kirby CMS !

J’ai fait un site avec beaucoup d’images volumineuses qui sont servies « à la bonne taille » par Kirby avec la fonction crop(). Jusque là super, sauf qu'en prod certaines images (pas toutes) ne sont pas prises en compte et je me retrouve avec quelques miniatures de 5333 px de large (et plus de 1 Mo) au lieu des 1000 px demandés, ce qui est évidemment hautement pénalisant.

Des idées sur ce qui se passe ?

(1/2)

Le site : https://hpaa.fr/

#kirbyCMS #php

En local (XAMPP de base) tout roule comme sur des roulettes, les versions de PHP sont identiques et a priori j’ai bien toutes les bonnes libs sur la prod (GD & co.).

J’ai mis l'hébergeur sur le coup (coucou @alwaysdata ❤️) qui semble dire que le processus réclamerait trop de RAM et s’arrêterait en route, et m'a conseillé d’uploader directement les images que j’ai en local dans /media… mais ça ne fonctionne toujours pas.

Mastodev, fais ta magie ? 🙃

(2/2)

@STPo @alwaysdata Peut-être essaye de supprimer le dossier /media pour que Kirby le regènère (une petite sauvegarde de /media avant au cas où ...)
@pixenjoy @alwaysdata Salut Gilles, oui je viens de le faire… sans résultat.
@STPo Tu veux que je teste sur mon VPS avec une url de test ?
@pixenjoy Je ne sais pas ce que ça veut dire, mais je prends tout 😀
@STPo Tu m'envoies une copie de ton site dans un zip en utilisant https://www.swisstransfer.com/fr et je l'installe sur mon serveur (Virtual Private Server = un serveur dans le cloud que je loue et administre en admin) et je lui met une url de test aux fesses et on regarde si le bug se reproduit avec une bière et un saut de pop-corns dans les mains.
SwissTransfer - Envoi sécurisé et gratuit de gros fichiers

Envoyez jusqu'à 50 Go - Gratuit et sans inscription - Gardez vos transferts jusqu'à 30 jours.

Swiss Transfer
@pixenjoy Ah bah ouais go ! Et tu gagnes une bière-maroilles quand tu passes !
@STPo Deal mon chum !
@pixenjoy Et j’avais zappé que tu étais végane, du coup ce sera protéines de soja texturées…
@STPo Oui, j'ai fais ça pour faire chier les Masculinistes #HommeSoja
@STPo Si votre ampoule de plafonnier s'éteint par intermittence, c'est parce que je télécharge le ZIP de @STPo !
@pixenjoy La prochaine fois je fais ça sous SPIP.
@STPo @pixenjoy tenez nous au jus de l'issue du problème. J'ai fait plusieurs sites Kirby dont certains du genre avec des packshots uploadées sous forme d'images de plusieurs mo et j'ai jamais eu ce soucis... curieux de voir à quoi ça peut être dû, ocazou pour les prochains projets
@Julianoe @pixenjoy Ça marche très bien sur le serveur de test de Gilles en tout cas… je suis à court d'idées.

@STPo @pixenjoy si je comprends bien ton hébergeur dit que ça peut prendre beaucoup de ram. Est-ce que tu as accès à des logs d'erreur ?
Si c'est en effet cela le problème tu devrais avoir une erreur du genre "Fatal error: Allowed memory size of x bytes exhausted"

Si tu as accès la config PHP/Apache tu peux essayer d'augmenter la limite "memory_limit". Poser un phpinfo() en local et en ligne pour voir si ce paramètre est le même sur les deux pourrait aider

@Julianoe @pixenjoy Merci pour tout ça, j’avais déjà testé pour memory_limit, j’ai forcé à 512 mais ça ne change rien…

J'ai bien accès aux logs mais je n'y comprends pas grand-chose… En gros il y a du timeout et du brun sur « mod_fcgid », et aussi du « fatal Error Unable to create lock file: Disk quota exceeded » (peut-être ça ?).

Merci pour le lien du forum, je redoutais de bricoler avec ImageMagick…

@STPo @pixenjoy disk quota exceeded: tu as combien d'espace disque libre sur ce serveur/hébergement ?
ça me semblerait étrange que ce soit ça car tu as bien un nouveau fichier qui est créé (avec les dimensions dans le nom)
@Julianoe A priori je suis large de ce côté-là.

@STPo tu as vérifié avec memory_limit mais max_memory_limit est de combien ?

Mais ça ne me semble pas être ça de ce que tu me dis sinon tu aurais des erreurs en référence à cela dans les logs.

@STPo ta fonction qui crop ressemble à quoi ?

@Julianoe C’est vraiment du Kirby basique a priori :

<img src="<?= $cover->crop(1000, 750)->url() ?>" alt="<?= $cover->alt()->esc() ?>">

@STPo ça fonctionne sur mon setup, même avec memory basse, sans imagemagick activé 🤔🤔🤔🤔
@STPo ça fail également si tu demandes une image plus petite que 1000px ? (je vois que l'image aux max est affichée à 450px de large)
@Julianoe Je crois que oui. Et oui c’est très zarb, ça marchait chez @pixenjoy aussi 🤔
@STPo @pixenjoy je n'ai pas vu de toot où tu le précisais mais tu es sur Kirby5 et PHP8.5?
@Julianoe Kirby 4.7.0 et PHP 8.2.30 en prod (8.2.12 en local).
@STPo @pixenjoy j'ai réussi à reproduire le bug en prod sur PHP8.3 aussi (Kirby5.3)
Je regarde de plus près et je vous redirai

@STPo @pixenjoy sans pour autant savoir l'origine du bug
J'ai fait 3 tests avec ton fichier.

$backgroundImage = $layout->image()->toFile();
echo '<img srcset="'. $backgroundImage->srcset([300, 800, 1024]) .'">';
echo '<img src="'. $backgroundImage->crop(1000, 750, ['quality' => 90,'crop' => 'center'])->url() .'" alt="'. $backgroundImage->alt()->esc() .'">';
echo '<img src="'. $backgroundImage->crop(1000, 750)->url() .'" alt="'. $backgroundImage->alt()->esc() .'">';

@STPo @pixenjoy Ta méthode est la seule qui ne génère pas de crop image.
Tu peux essayer en ajoutant un troisième argument à crop qui détaille ['quality' => 90,'crop' => 'center'] et nous dire si ça marche ?

@STPo @pixenjoy la fonction crop() est juste un raccourci pour la fonction thumb de toute manière donc ton crop est équivalent à :
echo '<img src="'. $backgroundImage->thumb(['width'=>1000, 'height'=>750, 'crop'=> 'center', 'quality'=>90])->url() .'" alt="'. $backgroundImage->alt()->esc() .'">';

NOTE : si je retire 'quality' j'ai le bug. Si je le mets, ça marche.
Essaie en précisant quality, en utilisant soit crop(), soit thumb() et ça devrait marcher

@STPo @pixenjoy chose encore plus étrange : si je lui demande une image en 1200x750, sans préciser la quality, ça marche, mais pas pour une 1000x750.
Vraiment cryptique.

@STPo @pixenjoy en rebasculant sur 128Mo rien ne marche et aucune des crop n'est produite. À 256Mo de memory_limit ça marche.
En cas de fail tu devrais voir dans les logs

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 16384 bytes) in /var/www/html/vendor/filp/whoops/src/Whoops/Util/SystemFacade.php on line 18, referer: https://www.example.com/

Example Domain

@Julianoe @pixenjoy Woooooh we’ve got a winner ! Ça a l’air de marcher !
Incroyable, franchement chapeau d’avoir trouvé ça. MERCI !

@Julianoe @pixenjoy Ah merde non ça le fait encore j’ai parlé trop vite…
https://hpaa.alwaysdata.net/projets

Bon maintenant elles s’appellent …-1000x750-crop-q90.jpg 😀

Grmlb.

Projets

Maisons, appartements, logements, équipements, tertiaire… découvrez tous les projets de l’atelier d’architecture.

HPAA

@STPo @pixenjoy Avec la mémoire à laquelle tu disais avoir accès sur le serveur je suis très circonspect.
J'ai checké sur l'un de mes sites Kirby créé récemment (donc Kirby 4-5, PHP8.4+) j'ai carrément dit au client de balancer ses .jpg de 25mo et l'algo les mange sans soucis pour les compresser et resize avec srcset() et thumb().

On y rerécléchissant et en regardant tous les cas où j'ai absorbé des grosses images, le problème vient de ton hébergement

@STPo @pixenjoy soit la config du serveur, soit de la mémoire, soit autre chose, mais ça n'est pas possible autrement.

Pas des milliers d'options :

- tester en utilisant imagemagick sur le serveur et kirby pour la compression (mais si c'est un problème de serveur qui choke.. peut être uqe ça ne suffira pas)

- sinon uploader des images moins grosses

- compresser les images dans le dossier /content
Perso c'est ce que je ferais. Les images sont safe en local, tu compresses un petit peu & retest

@STPo @pixenjoy avec des commandes comme mogrify tu peux facilement resize en 3 secondes tes 5000px+ à 2440px max et zou
https://julianoe.eu.org/notes/compression-optimisation-commandes/
🗜️ Compression, optimisation et redimensionement par lignes de commandes • Julianoë

Collection de lignes de commandes que j'ai pu utiliser pour accélérer le process de faire des transformations sur des images ou des vidéos

@Julianoe Merci pour ton suivi 🙂 Oui a priori ça consomme trop de RAM pour l'hébergement, mais pourtant c'est un plan payant. Je vais regarder tes options !
@Julianoe Bon, j’ai traqué les fichiers problématiques et les ai compressés directement dans content : ça a l’air de faire le job. Tant pis pour la propreté, on va dire que c’est résolu. Merci encore !
@STPo @Julianoe Je pense que je n'en dormirais pas la nuit.
@mariejulien @Julianoe … dit le gars qui suait abondamment si ses slides de confs n'étaient pas conçues de façon assez ÉLÉGANTE 😋
@STPo @Julianoe ben oui c'est pour ça. Mais bon SI CETTE SITUATION TE SATISFAIT ET QUE TU PEUX ENCORE TE REGARDER DANS UNE GLACE.
@mariejulien @Julianoe J’aurais donné sa chance au produit, donc : oui !
@STPo @Julianoe J'ai rencontré aussi des problèmes de RAM chez Alwaysdata (à la génération d'images, tiens donc !) avec le même plan. Je leur avais posé la question (parce que ce n'est pas très explicite dans leur page offre je trouve) sur la quantité de RAM dispo pour ce plan et c'est environ 1Go. Avec la génération ça peut monter vite… (Pour voir la RAM consommée, tu peux aller dans Processus -> Web, colonne RSS pour info).
@sdussaut @Julianoe Merci pour l'info, ça corrobore bien ce que m'avait dit le support.