Я думаю, что лучше всего ставить сервер на файл, как вы, что-то вроде:
header("Content-Type: image/jpeg");
header('Expires: "' . gmdate("D, d M Y H:i:s",
$expirationDate) . '"');
imagepng($image, NULL);
Конечно, вы используете php для обслуживания статического файла, но заголовок expire ограничит количество повторных запросов.
Обновление : поскольку $image
- это сгенерированный файл, при первом запросе сгенерируйте и сохраните изображение, затем выведите его. По дополнительным запросам просто выведите уже сгенерированное изображение. По сути, заголовки expire
контролируют кэш браузера, в то время как вам необходимо реализовать какое-либо кэширование на сервере, чтобы избежать генерации одного и того же вывода несколько раз.
Итак, вы смотрите на два разных вида кэширования . Вы можете сделать их одним и тем же сценарием, используя комбинацию из двух сценариев - действительно так, как вы хотите.
Если вы не можете установить стандартный заголовок expire с помощью apache (что, как вы говорите, нельзя, так как он варьируется), я считаю, что это ваш лучший (если не единственный) выбор.
Конечно, есть запутанный и сложный путь :
- Настройте mod_rewrite для отправки запросов на отсутствующие изображения в ваш php-скрипт.
- Добавить идентификатор сеанса к запросу изображения (чтобы он был уникальным для браузера).
- Пусть php-скрипт отправит заголовок expire и содержимое изображения.
- Пусть php-скрипт связывает реальное статическое изображение с именем конкретного сеанса.
Или что-то в этом роде. Я бы просто обслужил их всех, используя php.
Обновление : Или используйте mod_asis
из Отличный ответ VolkerK .