0

finfo_open(FILEINFO_MIME_TYPE) を使用すると、異なる MIMI タイプを取得していました。

たとえば、メモリに基づいて、docx は application/vnd.openxmlformats-officedocument.wordprocessingml.document であると考えています (この StackOverflow の投稿、docx、pptx などの正しい MIME タイプとは何ですか?を参照)。それらが application/zip として表示されていたことも思い出しますが、mime_content_type() を使用したときだった可能性があります。また、js ファイルが application/x-javascript として表示されると考えました。

以下は、それらを表示するためのスクリプトで現在取得しているものです。私は最近 PHP 5.14 に更新しましたが、新しい標準があるのか​​、それとも私が何かを台無しにしたのか疑問に思っています。これで問題ありませんが、拡張機能を MIMI タイプと比較するスクリプトを変更する必要があります。

編集 - PHPマニュアルで次のことを見つけました。

PHP >= 5.3.11 および >= 5.4.1 以降、マジック データベースの形式が変更されました。これにより、内部の MIME データベースがアップグレードされました。これは特に、外部マジックが読み込まれるコードに影響します。古い形式のマジック ファイルの読み込みは機能しません。また、MIME タイプの一部のテキスト表現が変更されました。たとえば、PHP の場合、「PHP スクリプト テキスト」ではなく「PHP スクリプト、ASCII テキスト」が返されます。

ありがとうございました

以下のスクリプトに基づく MIMI リスト

- directory
csv - text/plain
doc - application/msword
docx - application/msword
htm - text/html
ini - text/plain
jpg - image/jpeg
js - text/plain
mp3 - application/octet-stream
pdf - application/pdf
php - text/html
pptx - application/vnd.ms-powerpoint
pst - application/octet-stream
so - application/x-sharedlib
txt - text/plain
wmv - video/x-ms-asf
xls - application/msword
xlsx - application/vnd.ms-excel
zip - application/zip

PHPコード

<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
foreach (glob("*") as $filename) {
    $files[pathinfo($filename, PATHINFO_EXTENSION)]=array('filename'=>$filename,'finfo'=>finfo_file($finfo, $filename));
}
ksort($files);
foreach ($files as $fileext=>$file) {
    echo ($fileext.' - '.$file['finfo'].'<br />');
}
finfo_close($finfo);
?>
4

1 に答える 1

0

出力される MIME タイプは、システムの構成によって異なります。MSWord で .docx ファイルを開くようにシステムが構成されている場合application/msword、MIME タイプは .docx になります。同様に、同じ拡張子 .docx が LibreOffice で開くように構成されている場合application/vnd.openxmlformats-officedocument.wordprocessingml.document、MIME タイプは .docx になります。

このようにサーバーの構成に依存しているため、MIME タイプはあまり信頼できません。

于 2012-06-29T15:38:00.143 に答える