PB de mise en cache apache ou php

Répondre
nidosaur
Messages : 936
Inscription : ven. 12 janv. 2018 17:44

PB de mise en cache apache ou php

Message par nidosaur »

Bon je vais essayer d'expliquer le truc assez clairement
j'ai récupéré en hebergement un serveur Apache (jusque la c'est simple)
il est blindé de vhost et a une conf bien bordellique.

Le probleme c'est qu'une grande partie des images générées dynamiquement ne sont pas mise en cache (et il faudrait qu'elle le soit car elle bouffe des threads et du cpu sur un serveur qui est full)

Les images sont appellées de la maniere suivante /toto/image.jpg

sauf que l'image est pas dans toto, dans /toto on trouve un .htaccess qui appelle un script php qui genere l'image.

quand j'essaye de setter Last-Modified ou Etag dans le script de generation de l image, les headers sont dégagés (et je sais pas pourquoi) et forcément aucune mise en cache n'est faite.

Si quelqu'un a une idée pour forcer le cache ?!?


Les modules Apache
core prefork http_core mod_so mod_authz_host mod_actions mod_alias mod_auth_basic mod_authz_groupfile mod_authn_file mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_include mod_log_config mod_mime mod_negotiation mod_setenvif mod_status mod_userdir mod_asis mod_cache mod_disk_cache mod_imagemap mod_mem_cache mod_proxy mod_proxy_connect mod_proxy_ftp mod_proxy_http mod_rewrite mod_ssl mod_php5 mod_authz_default
Avatar de l’utilisateur
biour
Messages : 24390
Inscription : ven. 12 janv. 2018 17:44

PB de mise en cache apache ou php

Message par biour »

faudrait voir avec Ivanlefou, il a un peu bidouillé pour faire des banniere ds Stat, mais en ce moment il est plus tot OQP
Image
fighting_falcon
Messages : 656
Inscription : ven. 12 janv. 2018 17:44

PB de mise en cache apache ou php

Message par fighting_falcon »

tu modifies ton script PHP ...

1/ si l'image n'existe pas, je la créée, l'enregistre dans un dossier temporaire (genre /tmp ou /var/tmp) puis l'envoie au client
2/ si l'image existe, et qu'elle n'est plus valide (à définir), je la supprime du cache puis 1/
3/ l'image existe, elle est valide => j'envoie direct le contenu du fichier en cache
nidosaur
Messages : 936
Inscription : ven. 12 janv. 2018 17:44

PB de mise en cache apache ou php

Message par nidosaur »

le pb c'est pas la generation ou la validation de l image générée, le pb c'est qu'elle n'est pas mise en cache !
nicodache
Messages : 2382
Inscription : ven. 12 janv. 2018 17:44

PB de mise en cache apache ou php

Message par nicodache »

et sais-tu seulement comment vérifier si une image existe déja ?
genre un nom unique en fonction de l'image de base et des transformations appliquées ?
fighting_falcon
Messages : 656
Inscription : ven. 12 janv. 2018 17:44

PB de mise en cache apache ou php

Message par fighting_falcon »

le pb c'est pas la generation ou la validation de l image générée, le pb c'est qu'elle n'est pas mise en cache !
j'ai bien compris, ce que je te propose, c'est de modif ton script PHP qui génère tes images pour en plus les mettre en cache ...
nicodache
Messages : 2382
Inscription : ven. 12 janv. 2018 17:44

PB de mise en cache apache ou php

Message par nicodache »

et qu'il vérifie si elles sont pas déjà en cache avant de les générer :D
fighting_falcon
Messages : 656
Inscription : ven. 12 janv. 2018 17:44

PB de mise en cache apache ou php

Message par fighting_falcon »

of course ;)
fighting_falcon
Messages : 656
Inscription : ven. 12 janv. 2018 17:44

PB de mise en cache apache ou php

Message par fighting_falcon »

ceci dit, doit aussi y'avoir moyen d'utiliser des trucs tout fait pour ça ... genre memcache, eAccelerator, mmTurck, APC ...


Mediawiki utilise ce genre de choses, faudrait pi être matter le code, doit y avoir des trucs intéressants ...
nidosaur
Messages : 936
Inscription : ven. 12 janv. 2018 17:44

PB de mise en cache apache ou php

Message par nidosaur »

et sais-tu seulement comment vérifier si une image existe déja ?
genre un nom unique en fonction de l'image de base et des transformations appliquées ?
le pb vient pas du php (la generation des miniatures ou de leur mise a jour fonctionne bien), il vient plutot d'apache ou d'un de ses modules qui degagent tout ce qui est necessaire au niveau des headers pour permettre la mise en cache.
J'ai essayé d'ajouter les headers Last-Modified ou Etag a la generation 'image et une fois arrivé dans mon navigateur ces headers n'apparaissent pas.
        function display_thumb($pic) {
           ob_start();
           header("Content-type: image/jpeg");
header("Last-Modified: ".date('D, d M Y H:i:s', filemtime($pic))." GMT");
$etag = md5_file($file);
header("Etag: $etag");
           $source = imagecreatefromjpeg($pic);
           $im = imagejpeg($source);
           $buffer = ob_get_contents();
           ob_end_clean();
           echo $buffer;
        }
        if($is_file||$result) {
                display_thumb($file_path) ;
        }

fighting_falcon
Messages : 656
Inscription : ven. 12 janv. 2018 17:44

PB de mise en cache apache ou php

Message par fighting_falcon »

Peux tu tester cette version :
        function display_thumb($pic) {
           header("Content-type: image/jpeg");
           header("Last-Modified: ".date('D, d M Y H:i:s', filemtime($pic))." GMT");
           header("Etag: ".md5_file($file));
           $source = imagecreatefromjpeg($pic);
           echo imagejpeg($source);
           exit();
        }
        if($is_file||$result) {
                display_thumb($file_path) ;
        }
les headers dans le ob_start() / ob_end_clean() je ne pense pas que ça soit une bonne chose
et d'autre part, je ne vois pas l'utilité de ces fonctions ici ...
Répondre