Кэширование изображения на самом деле не является заданием для PHP. PHP должен использоваться, чтобы решить, показывать или нет. (Есть кеширование вещей, которые вы можете делать с PHP, но не в том же смысле.) По сути, вы хотите сделать запрос браузером второго второго изображения. После того, как браузер получит изображение, он должен автоматически отправить параметр «if-modified-by» в заголовке. В следующий раз, когда вы загружаете страницу, код ответа должен быть 304, и ваше изображение должно загружаться мгновенно. Вы можете выбирать из множества способов сделать это. Загрузите изображение с помощью javascript после загрузки страницы (чтобы предотвратить дополнительное время загрузки), или вы можете просто добавить тег изображения, который скрыт на странице где-нибудь.
Я также не тестировал его, но вы можете отправить запрос ajax прямо на изображение. Я не уверен, будет ли этот способ кэшировать его или нет.
EDIT: Это не самое изящное решение, но оно должно получить эту идею.
JS Пример:
<?php
session_start();
if (!isset($_SESSION['graphic'])) $_SESSION['graphic'] = "http://www.tomsfreelance.com/laptop/DSC_0011.JPG";
else $_SESSION['graphic'] = "http://www.tomsfreelance.com/laptop/DSC_0012.JPG";
?>
<html>
<head>
<script>
function loadImage() {
document.getElementById('preload').style.backgroundImage = "url(http://www.tomsfreelance.com/laptop/DSC_0012.JPG)";
}
</script>
</head>
<body onload="loadImage();">
<div id="preload" style="display: none;"></div>
<img src="<?php echo $_SESSION['graphic'];?>">
</body>
</html>
Этот вопрос остро страдает от большего количества людей в переполнении стека, требующих прочитать [эту статью.] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) – Blake