イメージをキャッシュすることは、PHPの仕事ではありません。それを表示するかどうかは、PHPを使用して判断する必要があります。 (PHPでできることはキャッシングがありますが、同じ意味ではありません)。基本的に、クライアントブラウザが第2のイメージを要求するようにします。ブラウザがイメージを取得すると、ヘッダーに「if-modified-by」パラメータが自動的に送信されます。次回にページをロードすると、レスポンスコードは304になり、イメージはすぐに読み込まれます。これを行うにはさまざまな方法があります。ページが読み込まれた後に(追加の読み込み時間を防ぐために)JavaScriptを使用して画像を読み込むか、ページのどこかに隠れている画像タグを含めることができます。
これもテストしていませんが、画像に直接ajaxリクエストを送信することができます。その方法でキャッシュするかどうかはわかりません。
編集: これは最も洗練された解決策ではありませんが、それは全体的なアイデアを得る必要があります。
JS例:あなたの目的は、HTTP少なく全体的に要求することです
<?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