私が自分のmimeタイプを調べる.flv
と、そのf4v
中php
にはapplication/octet-streamと表示されます。
これらのファイルのmimeタイプは「video/x-flv」と「video/x-f4v」だといつも思っていました。これは新しいものですか、それともファイルはファンキーなソースか何かからのものですか?
私が自分のmimeタイプを調べる.flv
と、そのf4v
中php
にはapplication/octet-streamと表示されます。
これらのファイルのmimeタイプは「video/x-flv」と「video/x-f4v」だといつも思っていました。これは新しいものですか、それともファイルはファンキーなソースか何かからのものですか?
私はこの回答で、WinistaとURLMonの両方がswfまたはflvを正しく検出しないことを述べています。これが、使用しているphpコンポーネントが「video/x-flv」ファイルと「video/x-f4v」ファイルを完全に識別できない理由です。
Winistaは、マジックファイル(特定のファイルの開始ビットを示すMIMEタイプとそれぞれの16進文字のリストを含む)を使用します。
この魔法のファイルに他の誰もflv検出を追加できなかった理由に焦点を当てることをお勧めします。へのwinistaプロジェクトは、古いJavaオープンソースプロジェクトからの移植です。
私が持っている他の唯一の考えはffmpegを試すことです、多分それはこれらのflvとf4vファイルの正確なMIMEタイプを検出する賢さを持っています。
私も同様の問題を抱えています。PHP 5.4.7(WindowsのXAMPP)に搭載されているFileInfo.flv
は、ファイルをとして検出できますvideo/x-flv
が、.mkv
ビデオ(として検出する必要がありvideo/x-matroska
ますが、代わりに返されますapplication/octet-stream
)やその他の多くの非一般的なマルチメディア形式では失敗します。
この問題を解決するために、次の関数を使用して、FileInfoを完全に削除し、古い、適切な拡張機能によるmimeメソッドに戻しました。
public static function getMimeTypeByExtension($file)
{
$extensions = require('mimeTypes.php');
if(($ext=pathinfo($file, PATHINFO_EXTENSION))!=='')
{
$ext=strtolower($ext);
if(isset($extensions[$ext]))
return $extensions[$ext];
}
return null;
}
あなたの内容はpastebin.commimeTypes.php
で見つけることができます。これは、 ApacheSVNのファイルとYiiFrameworkの同様の配列をマージすることによって私がコンパイルしたものです。結果のセットには、ファイル拡張子と対応するMIMEタイプの間に1000を超える関係があります。mime.types
mimeTypes.php
重要な注意:このソリューションを使用する前に、どのような目的でそれが必要かを慎重に検討する必要がありますか?ファイル拡張子に基づくMIMEタイプは、その拡張子を変更するだけで、非常に簡単になりすますことができます。したがって、セキュリティ関連のコードは、私のソリューションから可能な限り遠ざける必要があります。
フロープレーヤーに正しいMIMEタイプのビデオファイルを提供するという単純な目的のためだけに必要でした。ユーザーがそのようなファイルの拡張子を別のものに変更すると、flowplayerはその映画の再生に失敗するだけだと思いました。