PB de mise en cache apache ou php
PB de mise en cache apache ou php
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
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
PB de mise en cache apache ou php
faudrait voir avec Ivanlefou, il a un peu bidouillé pour faire des banniere ds Stat, mais en ce moment il est plus tot OQP

-
- Messages : 656
- Inscription : ven. 12 janv. 2018 17:44
PB de mise en cache apache ou php
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
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
PB de mise en cache apache ou php
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 !
PB de mise en cache apache ou php
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 ?
genre un nom unique en fonction de l'image de base et des transformations appliquées ?
-
- Messages : 656
- Inscription : ven. 12 janv. 2018 17:44
PB de mise en cache apache ou php
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 ...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 !
PB de mise en cache apache ou php
et qu'il vérifie si elles sont pas déjà en cache avant de les générer 

-
- Messages : 656
- Inscription : ven. 12 janv. 2018 17:44
PB de mise en cache apache ou php
of course 

-
- Messages : 656
- Inscription : ven. 12 janv. 2018 17:44
PB de mise en cache apache ou php
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 ...
Mediawiki utilise ce genre de choses, faudrait pi être matter le code, doit y avoir des trucs intéressants ...
PB de mise en cache apache ou php
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.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 ?
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) ; }
-
- Messages : 656
- Inscription : ven. 12 janv. 2018 17:44
PB de mise en cache apache ou php
Peux tu tester cette version :
et d'autre part, je ne vois pas l'utilité de ces fonctions ici ...
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 ...