MHT ファイルを表示するための iframe を取得する際に問題が発生しています。
if( strtolower( substr( $filename , -4 ) ) == ".mht" ){
$filename = str_replace( "/" , "\\" , $filename );
header("Content-type: $filetype");
header("Content-Length: $filesize");
header('Content-Disposition: attachment; filename="'.$title.'.mht"');
readfile( HT_STORAGE . $filename );
}
else{
$filename = str_replace( "\\" , "/" , $filename );
header( "location: https://secure.***************.com/" . $filename );
}
上記の方法は機能しますが、クライアントが満足していない 2 つの手順 (ダウンロードと開く) が必要です。
ご覧のとおり、今はブラウザに強制的に MHT をダウンロードとして開かせています。MHT 拡張子を持たないファイルの場合と同様に、この iframe 内に MHT を表示するように、ヘッダーの場所を使用してリダイレクトする必要があります。これは、ブラウザにその MHT コンテンツを伝える単なるヘッダー呼び出しであると想定しています。通常のリダイレクトでは、ブラウザーは一連の MHT タグを表示するだけで、実際のコンテンツは表示しません (そのため、特別なヘッダーが必要であると想定しています)。何か案は?
編集:
この問題に関して私が見つけたその他の情報を次に示します。MHT ファイルには、次のようないくつかのセグメントが含まれています。
From: "Saved by Windows Internet Explorer 9"
Subject: Print Preview
Date: Tue, 2 Aug 2011 12:06:51 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
type="text/html";
boundary="----=_NextPart_000_0186_01CC510C.A9789090"
X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7600.16807
This is a multi-part message in MIME format.
と
------=_NextPart_000_0186_01CC510C.A9789090
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: https://*******.net/packages/js/jquery.header.js
何らかの理由で、添付方法を使用してファイルを「開く」と、IE/Firefox でドキュメントが問題なくレンダリングされます。ヘッダーの「場所」メソッドを使用すると、ファイルの内容 (html タグ、MIME など)、解釈された内容が表示されるだけです。これを行うと、MHT ページを実際に表示するのではなく、生の HTML 出力が表示されます。
if( strtolower( substr( $filename , -4 ) ) == ".mht" ){
$filename = str_replace( "\\" , "/" , $filename );
header("Content-type: message/rfc822");
header( "location: " . $filename );
//header("Content-Length: $filesize");
//header('Content-Disposition: attachment; filename="'.$title.'.mht"');
//readfile( HT_STORAGE . $filename );
}
else{
$filename = str_replace( "\\" , "/" , $filename );
header( "location: https://secure.*****************.com/" . $filename );
}
content-type と location を使用すると、出力は IE と FF (およびほとんどの場合、他のすべてのブラウザー) で次のようになります。
From: "Saved by Windows Internet Explorer 9"
Subject: Print Preview
Date: Tue, 2 Aug 2011 12:06:51 -0500
MIME-Version: 1.0
Content-Type: multipart/related;
type="text/html";
boundary="----=_NextPart_000_0186_01CC510C.A9789090"
X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7600.16807
This is a multi-part message in MIME format.
------=_NextPart_000_0186_01CC510C.A9789090
Content-Type: text/html;
charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://kinnser.net/am/printwrapper.cfm?PatientTaskKey=36184728
=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3.org/TR/html4/loose.dtd"><HTML><HEAD><TITLE>Print=20
Preview</TITLE>...
したがって、実際に MHT をレンダリングするのではなく、すべてのタグとデータを吐き出すだけです。
何か案は?ファイルから「MIME」データを削除する必要がありますか?:
------=_NextPart_000_0186_01CC510C.A9789090
Content-Type: text/html;
charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: https://kinnser.net/am/printwrapper.cfm?PatientTaskKey=36184728
もしそうなら、どうやって?
編集
皮肉なことに、それを content-disposition: 添付ファイルとして設定し、readFile を使用すると、ドキュメントを開くことができ、適切に表示されます。インラインで iframe に直接挿入しようとした場合にのみ、ソース コードがレンダリングされ、コンテンツはレンダリングされません。何か案は?