css et cache

WRInaute passionné
Je vous explique mon problème (pas simple).

Sur la page d'accueil du site de mon profil y'a une photo tirée aléatoirement de la base et redimensionnée via php.
J'affiche cette image en background par css et je place dessus un gif transparent (ce qui donne le cadre arrondi).

Un lien sur cette image dirige vers la page dont elle est issue.

mon code est donc le suivant

Dans ma page :
Code:
<?php
... (génération de l'image image.png)
?>
<a href="dest.php"><img src="cache.gif" id="image_aléatoire"></a>

CSS :
Code:
image_aleatoire {
background: url(image.php);
}

image.php
Code:
<?php
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache");
header("Content-type: image/png");
readfile("image.png");
?>


Ca ne marche pas : l'image est mise en cache (alors qu'il n'y a pas de problème si j'appelle image.php dans ma page)

Est ce que les url du .css sont automatiquement mises en cache ???

Comment contourner le pb ??

merci
 
WRInaute passionné
Merci mais je ne comprends pas grand chose. :?

Je sais ne pas mettre en cache un fichier, mais ça ne marche visiblement pas lorsque l'url vient d'une css ....
 
WRInaute accro
Ah pardon je n'avais pas vu que tu avais un CSS externe.
Bien sur il est mis en cache c'est le but. Mais je pense que ton problème ne vient pas du cache du CSS mais de l'HTML.
Et si tu met
Code:
image_aleatoire {
background: url(image.php);
}
dans la page HTML et non pas dans la feuille de style CSS séparée avec une belle entête
Code:
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
?
 
WRInaute passionné
milkiway a dit:
Bien sur il est mis en cache c'est le but.

Tu parles de quoi là ?
du fichier css (evidement)
ou du fichier photo.php ??

Je viens de passer le style dans ma page...et ça marche pas.
Incompréhensible.
 
WRInaute discret
Et avec

<META HTTP-EQUIV="Expires" CONTENT="-1">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

?
 
WRInaute passionné
Le problème semble résolu ... et je ne sais pas pourquoi :evil:

J'avais du merder qq part, ma solution de base marche.

M'enfin merci a tous.
 
WRInaute impliqué
Mais affreux doute : tu génères ton .png à chaque affichage de page ou tu ne fais que le sélectionner au hasard ? Ca n'a rien à voir avec ton soucis mais si c'est la première soluce c'est le genre de choses qui font plier un serveur en un rien de temps ^^
 
WRInaute passionné
Je le génère à chaque affichage de la home.
C'est si violent que ça ??
Je viens de calculer, ça met entre 0.5 et 1 secondes.
 
WRInaute accro
Oui c'est très très lourd je n'ai pas osé te le dire mais franchement c'est lourd, plutôt que de générer une image pourquoi ne pas faire une balise <img> avec un href dynamique ?
 
WRInaute passionné
milkiway a dit:
... pourquoi ne pas faire une balise <img> avec un href dynamique ?

Parce qu'il faudrait avoir toutes les vignettes dans la base.
Mais si vous me le conseillez, je vais faire comme ça..
 
WRInaute accro
oui juste un nom et mm pas dans une base
tu listes les noms de fichiers des photos
tu fais un rand
et tu le met dans la balise image
 
WRInaute passionné
Evidement que la vignette n'est pas dans la base :roll:
Je me suis mal exprimé..

Les vignette doivent être sur le serveur, ça veut dire de la place en plus (par rapport aux grandes photos c'est pas beaucoup, mais je voulais l'eviter pour un simple affichage en page d'accueil).
 
WRInaute passionné
Bon, résumons : Pourquoi est ce que je vais "tuer mon serveur" ?
ça tourne comme ça depuis 1 an et j'ai pas de pbs ...
 
WRInaute discret
bsr,
pourquoi ne pas faire appel aux images d'un repertoire aléatoirement ?
moi j'utilise ce code:

Code:
<?php
// repertoire contenant les images
define('IMAGE_DIR' , './im/intro/');

$handle = opendir(IMAGE_DIR);
while($file = readdir($handle)) {
    if($file != '.' && $file != '..' && preg_match('`\.(gif|jpe?g|png)$`i', $file))
    $im2[] = $file;
}
closedir($handle);
echo '<a href="splash.php"><img src="' . IMAGE_DIR . $im2[rand(0, count($im2)-1)] . '"/></a>';
?>

peut-etre que cela peut t'aider ?...
 
WRInaute impliqué
Alors je pense qu'il faut les créer....
Une petite page php va te les convertir en vignette une fois pour de bon et hop, après tu as juste à faire appel à ces vignettes (base ou pas base)
Je pense que ça mettra bcp moins de temps qu'une seconde ! !
 
Discussions similaires
Haut