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

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

Jul 13, 2016 am 10:29 AM
ウェブ開発 エンタープライズセキュリティ 情報技術 セキュリティソフト データベース モバイル開発 システムセキュリティ ウェブサイトのセキュリティ サイバーセキュリティ ネットワーク技術 ソフトウェア開発

今日画像をアップロードして画像の 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. ..
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます Jul 18, 2024 am 05:48 AM

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

PHP でデータベース接続エラーを処理する方法 PHP でデータベース接続エラーを処理する方法 Jun 05, 2024 pm 02:16 PM

PHP でデータベース接続エラーを処理するには、次の手順を使用できます。 mysqli_connect_errno() を使用してエラー コードを取得します。 mysqli_connect_error() を使用してエラー メッセージを取得します。これらのエラー メッセージをキャプチャしてログに記録することで、データベース接続の問題を簡単に特定して解決でき、アプリケーションをスムーズに実行できるようになります。

GolangでJSONデータをデータベースに保存するにはどうすればよいですか? GolangでJSONデータをデータベースに保存するにはどうすればよいですか? Jun 06, 2024 am 11:24 AM

JSON データは、gjson ライブラリまたは json.Unmarshal 関数を使用して MySQL データベースに保存できます。 gjson ライブラリは、JSON フィールドを解析するための便利なメソッドを提供します。json.Unmarshal 関数には、JSON データをアンマーシャリングするためのターゲット型ポインターが必要です。どちらの方法でも、SQL ステートメントを準備し、データをデータベースに永続化するために挿入操作を実行する必要があります。

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

PHP データベース接続の落とし穴: よくある間違いや誤解を避ける PHP データベース接続の落とし穴: よくある間違いや誤解を避ける Jun 05, 2024 pm 10:21 PM

PHP データベース接続エラーを回避するには、接続エラーを確認し、変数名を資格情報と照合するというベスト プラクティスに従ってください。安全なストレージまたは環境変数を使用して、資格情報のハードコーディングを回避します。 SQL インジェクションを防止し、準備されたステートメントまたはバインドされたパラメーターを使用するために、使用後に接続を閉じます。

HTML、CSS、およびJavaScript:Web開発者に不可欠なツール HTML、CSS、およびJavaScript:Web開発者に不可欠なツール Apr 09, 2025 am 12:12 AM

HTML、CSS、およびJavaScriptは、Web開発の3つの柱です。 1。HTMLは、Webページ構造を定義し、などなどのタグを使用します。2。CSSは、色、フォントサイズなどのセレクターと属性を使用してWebページスタイルを制御します。

PHPの現在のステータス:Web開発動向を見てください PHPの現在のステータス:Web開発動向を見てください Apr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

HTML、CSS、およびJavaScriptの未来:Web開発動向 HTML、CSS、およびJavaScriptの未来:Web開発動向 Apr 19, 2025 am 12:02 AM

HTMLの将来の傾向はセマンティクスとWebコンポーネントであり、CSSの将来の傾向はCSS-in-JSとCSShoudiniであり、JavaScriptの将来の傾向はWebAssemblyとServerLessです。 1。HTMLセマンティクスはアクセシビリティとSEO効果を改善し、Webコンポーネントは開発効率を向上させますが、ブラウザの互換性に注意を払う必要があります。 2。CSS-in-JSは、スタイル管理の柔軟性を高めますが、ファイルサイズを増やす可能性があります。 CSShoudiniは、CSSレンダリングの直接操作を可能にします。 3. Webassemblyブラウザーアプリケーションのパフォーマンスを最適化しますが、急な学習曲線があり、サーバーレスは開発を簡素化しますが、コールドスタートの問題の最適化が必要です。

See all articles