ホームページ > バックエンド開発 > PHPチュートリアル > finfo_file 関数はファイル MIME 値検証エラーの解決策を取得します_PHP チュートリアル

finfo_file 関数はファイル MIME 値検証エラーの解決策を取得します_PHP チュートリアル

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-07-13 10:29:14
オリジナル
1221 人が閲覧しました

今日画像をアップロードして画像の MIME 値を確認していて、特殊なケースでは finfo_file で取得した MIME 値を直接使用できないことに突然気づきました。

公式の書き方によると

$finfo=finfo_open(FILEINFO_MIME);
$mime=finfo_file($finfo,$file_path);
finfo_close($finfo);
アラート($mime);

次のようにファイルの MIME タイプを取得します

しかし今日、これが機能しないことがわかりました。ファイル転送中に転送タイプをバイナリ ストリームに設定する文字セットがある場合、次の図のようなものが表示されます。

余分なセミコロンと charset=binary があることがはっきりわかります

ここでファイル MIME 値が検証された場合、それが正しく合法的なファイル タイプであっても、取得した MIME の後にバイナリ ファイル ストリーム文字列「; charset=binary」の余分な部分があるため、検証に合格しません。価値

$file_name = $_FILES['imgFile']['name'];

$temp_arr =explode(".", $file_name);

$file_ext = array_pop($temp_arr);
$file_ext = トリム($file_ext);
$file_ext = strto lower($file_ext);

$_mime=array('jpg'=>array('image/pjpeg','image/jpeg'),'gif'=>array('image/gif'),'png'=>array( 'image/x-png','image/png'),'jpeg'=>array('image/jpeg','image/pjpeg'));

if(empty($mime) || !in_array($mime,$_mime[$file_ext])){

alert('画像 MIME タイプ エラー!');
}

そのため、特別な環境要件の下で互換性処理を行う必要があります

MIME タイプの互換性を取得する修正された一般的な方法は次のとおりです (赤い部分に注意し、複数の要件環境と互換性のある正規表現を使用して正しい MIME 値を取得します)。

if(empty($mime) && function_exists('finfo_open')){

$finfo=finfo_open(FILEINFO_MIME);

$mime=finfo_file($finfo,$file_path);
finfo_close($finfo);
//特殊なアプリケーションや特殊な環境でのファイルアップロードのMIME正確な検証に対応
$new=preg_match('/([^;]+);?.*$/',$mime,$match);
if($new) $mime=trim($match[1]);
アラート($mime);
}

このようにして、互換性のある環境で MIME タイプを正しく取得し、正しいファイル MIME の正当性を確認できます。実行結果は図に示すとおりです。

http://www.bkjia.com/PHPjc/777566.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/777566.html技術記事今日、画像の MIME 値を確認するために画像をアップロードしたときに、公式の記述方法によれば、特殊な場合に finfo_file で取得した MIME 値を直接使用できないことに気づきました。 $finfo=finfo_open(FILEINF. ..
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート