1. ホーム
  2. php

[解決済み] モバイル向けHTTPヘッダー "Content-Type: application/force-download "の有用性とは?

2022-02-16 07:38:24

質問

現在、携帯端末からリンクにアクセスしてメディアコンテンツ(動画、音声、写真...)をダウンロードできるPHPスクリプトを作成しています。(例 http://www.my-web-site.com/download.php?id=7ejs8ap ) 最近の携帯電話(Samsung Galaxy S、iPhone 4S、その他)でテストしたときは、私のスクリプトは非常にうまくいったのですが、古い携帯電話のSamsung C3050ではエラーが発生しました。ダウンロードしたいメディアは、いつもなら簡単にダウンロードできる音声mp3ファイルでした。

エラーの内容は、"Unknown content type."のようです。 そこで、HTTPヘッダーのContent-Typeが"application/force-download"だけだったので、これをコメントにして再挑戦するようにしています。すると、うまくいく。 しかし、今、私は現在、このContent-Typeの意味と、他のモバイルのために必須とすることができるかどうかを尋ねています。iPhone 4でContent-Typeなしでテストしたところ、うまくいきましたが、すべてのモバイルでこの互換性があるかどうかはわかりません。

このContent-Typeがどのように機能するのか、なぜこれが標準のMIMEでないのか、あるいは、ファイル、ブラウザ、ダウンロードするデバイスが何であれ、すべてのダウンロードでこのContent-Typeがオプションであることを確認するのに役立つ他のあらゆることについて、誰か説明してくださいませんか。

皆さん、ありがとうございます。

以下は、私が送信したPHPヘッダーです。

<?php
//Assume that $filename and $filePath are correclty set.
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$filename.'"');
// header('Content-Type: application/force-download'); Non-standard MIME-Type, incompatible with Samsung C3050 for example. Let it commented
readfile($filePath);
?>

EDIT : ソニーのXperiaで試したところ、ダウンロードは成功しませんでした。ダウンロードしたいファイルの "html-encoded" バイトだけが表示されます。 application/octet-streamやapplication/force-downloadがうまくいかない場合、どのようなcontent-typeを使用しなければならないかを知るにはどうすればよいでしょうか?

解決方法は?

Content-Type: application/force-download とは、「私、ウェブサーバは、あなた(ブラウザ)に対して、このファイルが何であるかについて嘘をつき、あなたがそれをPDF/Word Document/MP3/その他として扱わず、代わりに謎のファイルをディスクに保存するようユーザに促すつもりです。これは汚いハックで、クライアントが"save to disk"を行わない場合、恐ろしいほど壊れます。

使用するメディアに対して正しい MIME タイプを使用してください (例. audio/mpeg mp3の場合)。

を使用します。 Content-Disposition: attachment; etc etc ヘッダは、デフォルトの動作に従うのではなく、クライアントにダウンロードするよう促したい場合に使用します。