【PHP】判定ファイルタイプ

1627 ワード

参照:@夜の通行人
一般的にはファイル拡張子に基づいてファイルタイプを判断しますが、これは頼りにならないので、簡単に拡張子を修正することで避けることができます.一般的にはファイル情報を読み取って識別しなければなりません.
<?php

$files = array('./test.jpg', 'test.png');
$fileTypes = array(
    7790    => 'exe',
    7784    => 'midi',
    8075    => 'zip',
    8297    => 'rar',
    225216  => 'jpg',
    7173    => 'gif',
    6677    => 'bmp',
    13780   => 'png',
);
foreach($files as $file) {
    $fp = fopen($file, 'rb');
    $bin = fread($fp, 2); //        
    fclose($fp);
    $strInfo = @unpack("C2chars", $bin);
    $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
    $fileType = isset($fileTypes[$typeCode]) ? $fileTypes[$typeCode] : 'unknown';
    echo $file , ' type : <b>', $fileType, '</b> code : <b>', $fileType, '</b><br />';
}

注意:ファイル名の拡張
Linuxはファイル名拡張を使用してファイルのタイプを識別しません.逆にLinuxはファイルのヘッダ内容に基づいてそのタイプを識別する.人間の可読性を向上させるためにファイル名拡張を使用することもできますが、Linuxシステムには何の役にも立ちません.ただし、Webサーバなどのアプリケーションでは、ファイルタイプを識別するために命名規則を使用する場合がありますが、Linuxシステム自体の要件ではなく、特定のアプリケーションの要件にすぎません.Linuxはファイルアクセス権によりファイルが実行可能ファイルであるか否かを判断する.プログラムおよびスクリプトの作成者または管理者が実行可能ファイルとして認識できるように、いずれのファイルにも実行可能権限を付与できます.このようにすれば安全に役立つ.システムに保存された実行可能なファイルは自動的に実行できません.これにより、多くのスクリプトウイルスを防止できます.Linux環境では、コマンドfileを使用して、あるファイルがELF形式の実行可能ファイルなのか、shell script形式のファイルなのか、または他のフォーマットなのかを知ることができます.コマンドは、#file startxなどのフォーマットを使用します.