Amazon AWS によって提供されている画像へのリンクをユーザーがクリックしたときに、ブラウザにダウンロード ダイアログを強制的に表示させようとしています。これを行うための次のPHPスクリプトがありますが、これはほとんど機能しています。ただし、代わりに文字化けしたテキストの Web ページを生成する iPad では失敗します。ヘッダーの Content-Type を「image/jpeg」に設定しているにもかかわらず、結果のファイルが CSV として表示され、iPad で問題を引き起こしている可能性があります (一方、デスクトップ ブラウザーは正しいタイプに修正されています)。
Content-Type のdie()
前にaを配置すると、JPEG として表示されます。fpassthru($fp)
Content-Type が正しく設定され、JPEG として配信されるようにするにはどうすればよいですか?
$urlComponents = parse_url($url); // where URL is the URL to the image on AWS
if (!isset($urlComponents['path'])) {
die();
}
$pathParts = pathinfo($urlComponents['path']);
if (!isset($pathParts['basename'])) {
die();
} else {
$image = $pathParts['basename'];
}
$fp = fopen($url, 'rb');
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$image");
header("Content-Type: image/jpeg");
header("Content-Transfer-Encoding: binary");
fpassthru($fp);
fclose($fp);
このコードは、PHP.net の Web サイトhttp://php.net/manual/en/function.fpassthru.phpにある例に基づいています。