元記事 : プログラム経由で画像を表示させる際の表示バラつきを調べてみた (TRASH-NEWS)
[1]〜[6]は同じサイト(同じドメイン)の画像、[7]〜[11]は異なるサイト(異なるドメイン)の画像を読み込んでいます。
[1]はPHPのreadfile関数で読み込んだもの。[2]はPHPのheader関数(のLocation)で307 Temporary Redirect転送させて読み込んだもの。[3]はPHPのheader関数(のLocation)で301 Moved Permanently転送させて読み込んだもの。
[4]はPHPのheader関数で画像用のヘッダをつけたのち、PHPのreadfile関数で読み込んだもの。[5]はPHPのheader関数で画像用のヘッダ(Content-Disposition含)をつけたのち、PHPのreadfile関数で読み込んだもの。[6]はじかに画像を読み込んだもの(画像のURLを直接指定)。
[6]はPHPのreadfile関数で読み込んだもの。[7]はPHPのheader関数(のLocation)で307 Temporary Redirect転送させて読み込んだもの。[8]はPHPのheader関数(のLocation)で301 Moved Permanently転送させて読み込んだもの。
[9]はPHPのheader関数で画像用のヘッダをつけたのち、PHPのreadfile関数で読み込んだもの。[10]はPHPのheader関数で画像用のヘッダ(Content-Disposition含)をつけたのち、PHPのreadfile関数で読み込んだもの。[12]はじかに画像を読み込んだもの(画像のURLを直接指定)。
$SameSiteSRC = '../image/event/20080621_Opera950ImageTest.png';
$CrossSiteSRC = 'http://images.sakura.ne.jp/20080621_Opera950ImageTest.png';
if(isset($_GET['Mode'])){
$Mode = $_GET['Mode'];
if(isset($_GET['Ext'])){
header('Content-length: 6280');
header('Content-type: image/png');
if(isset($_GET['Att'])){
header('Content-Disposition: attachment; filename="TRASH-NEWS.png"');
}
}
switch($Mode){
case 'SameSiteRead' :
readfile($SameSiteSRC);
break;
case 'SameSiteTempRedirect' :
header("Location:{$SameSiteSRC}",TRUE,307);
break;
case 'SameSitePermaRedirect' :
header("Location:{$SameSiteSRC}",TRUE,301);
break;
case 'CrossSiteRead' :
readfile($CrossSiteSRC);
break;
case 'CrossSiteTempRedirect' :
header("Location:{$CrossSiteSRC}",TRUE,307);
break;
case 'CrossSitePermaRedirect' :
header("Location:{$CrossSiteSRC}",TRUE,301);
break;
default :
break;
}
exit();
}else{
readfile($SameSiteSRC);
exit();
}