ホームページ >バックエンド開発 >PHPチュートリアル >PHP はアップロードされている Excel ファイルのタイプを検出します
PHP はアップロードされた Excel ファイルの種類を検出します
サフィックス名の変更などのローエンドの検出エラーを防ぐことができる、アップロードされたファイル タイプを検出するための比較的ハイエンドなメソッドを紹介します。これを呼び出し用のクラスにカプセル化します。
出力結果をブラウザに送信する場合、ブラウザは出力ドキュメントを処理するために適切なアプリケーションを起動する必要があります。これは、さまざまなタイプの MIME (多目的インターネット メール拡張機能) を通じて実現できます。 http では、MIME タイプは content-type ヘッダーで定義されます。
たとえば、クライアントが Excel ファイルをサーバーにアップロードする場合、MIME タイプは "application/vnd.ms-excel" になります。 php では、アップロードされたファイルの種類は $_FILE["type"] を通じて取得できます。
初期の HTTP プロトコルでは、追加のデータ型情報はなく、クライアントによってマルチメディア データ型をサポートするために、追加のデータ型が使用されました。データ型を識別するためのドキュメントの前にある HTTP プロトコルのデータ型情報。
各 MIME タイプは 2 つの部分で構成され、最初の部分はデータの一般的なカテゴリであり、2 番目の部分は特定のタイプを定義します。 (詳しくはMIMEタイプ表をご確認ください)
/** * Detect upload file type * * @param array $file * @return bool $flag */ private function detectUploadFileMIME($file) { // 1.through the file extension judgement 03 or 07 $flag = 0; $file_array = explode ( ".", $file ["name"] ); $file_extension = strtolower ( array_pop ( $file_array ) ); // 2.through the binary content to detect the file switch ($file_extension) { case "xls" : // 2003 excel $fh = fopen ( $file ["tmp_name"], "rb" ); $bin = fread ( $fh, 8 ); fclose ( $fh ); $strinfo = @unpack ( "C8chars", $bin ); $typecode = ""; foreach ( $strinfo as $num ) { $typecode .= dechex ( $num ); } if ($typecode == "d0cf11e0a1b11ae1") { $flag = 1; } break; case "xlsx" : // 2007 excel $fh = fopen ( $file ["tmp_name"], "rb" ); $bin = fread ( $fh, 4 ); fclose ( $fh ); $strinfo = @unpack ( "C4chars", $bin ); $typecode = ""; foreach ( $strinfo as $num ) { $typecode .= dechex ( $num ); } echo $typecode; if ($typecode == "504b34") { $flag = 1; } break; } // 3.return the flag return $flag; }
ファイルタイプ比較表