2009-11-29 4 views
0

Sur mon serveur Apache, j'ai un service PHP qui reçoit des requêtes et génère une image à partir d'elles. Ce que je veux faire est de mettre en cache l'image générée sur mon serveur (pas le navigateur du client) une fois généré, donc si l'image avec des paramètres spécifiques a déjà été générée et que quelqu'un la demande, mon serveur web retournera l'image mise en cache nouveau. Je sais que je pourrais stocker les images générées sur le serveur manuellement et à chaque demande vérifier si elles existent, puis exécuter des tâches cron pour supprimer les images expirées, mais je cherche un moyen plus efficace.Images du cache du serveur Apache

Merci.

Répondre

1

Vous avez déjà mentionné le moyen le plus efficace. Stockez-le sur le disque. Vous pouvez éventuellement utiliser quelque chose comme memcache, le stocker dans memcache et ensuite faire memcache auto-expire l'enregistrement après un certain laps de temps.

+2

@nigative, je vous recommande de lire attentivement la documentation sur memcached et de faire quelques tests, car par défaut, la taille maximale de l'objet est de 1 Mo, ce qui peut être plus petit que vos images. http://dev.mysql.com/doc/refman/5.0/en/ha-memcached-faq.html –

+0

Alors dans ce cas, j'ai encore besoin de gérer tout dans mon code PHP? Générer une clé à partir d'une chaîne de requête, vérifier s'il existe un enregistrement pour cette clé dans memcache, et si c'est le cas, le retourner, sinon générer une nouvelle image, la clé et la stocker dans memcache? –

1

Comme vous l'avez dit, stockez-le sur le disque et lisez-le au client. Vous pourriez avoir ID.ext et ID.date où ID.date contient une date d'expiration (en temps unix). Ensuite, il suffit de comparer ce qui est dans ID.date à ce que time() dit, si time() est plus grand que ce que ID.date est, puis supprimez les deux fichiers et re-générer l'image.

+2

ID.date n'est pas requis, il suffit de stat() le fichier pour obtenir la date à laquelle il a été créé. –

1

Selon la manière dont vous générez les images, vous pouvez utiliser mod_cache pour effectuer la mise en cache pour vous.

+0

Il ressemble à mod_expires pages de mise en cache dans le navigateur (en-tête HTTP), pas sur le serveur. –

+1

Oh, oups. Pensé une chose, tapé/lié un autre. En fait destiné à suggérer mod_cache, éditera. – Amber

Questions connexes