PHP でアップロードされたファイルのファイル タイプを判断する安全な方法
PHP を使用してファイルをアップロードして保存する場合、多くの人はファイルの名前を変更し、書き込み可能なフォルダーに保存します。その場合、アップロードされたファイルの拡張子をファイルの種類に基づいて判断するのが間違いの 1 つです。
これを行うことは、簡単な例を挙げると、通常、拡張子で判断するか、$_FILE 配列を使用して判断し、ユーザーがアップロードしたファイルかどうかを判断します。 image.php .png、image.png.php、image.php%****.png などの名前が付いている場合、判定は間違ってしまいます。
また、$_FILES['type'] が改ざんされる可能性があります。
ファイル名を決定する方法は次のとおりです:
ファイルの最初の 4 バイトを判断として読み取ります。
コードをすぐ下に追加します
私が実装したのは Word ファイルと PDF ファイルのみをサポートすることであり、ファイル サイズは 512kb 未満です。
$tmpname = $_FILES ['userfile'] ['tmp_name']; if(is_uploaded_file($tmpname)) { $mimetype = detectMIME($tmpname); $tuozhanming = getFileExt($filename, $mimetype); if($tuozhanming == "type_error"){ echo '仅支持word和pdf文件,且文件大小小于512kb:<a href='.$reurl.'>请重试</a>'; exit(); } }else{ $_FILES ['userfile'] ['error'] = 6; } if ($_FILES ['userfile'] ['error'] > 0) { echo 'Problem: '; switch ($_FILES ['userfile'] ['error']) { case 1 : echo '上传文件过大:<a href='.$reurl.'>请重试</a>'; break; case 2 : echo '上传文件过大:<a href='.$reurl.'>请重试</a>'; break; case 3 : echo '文件上传丢失:<a href='.$reurl.'>请重试</a>'; break; case 4 : echo '无文件被上传:<a href='.$reurl.'>请重试</a>'; break; case 6 : echo '仅支持word和pdf文件,且文件大小小于512kb:<a href='.$reurl.'>请重试</a>'; break; case 7 : echo '上传文件存储失败:<a href='.$reurl.'>请重试</a>'; break; } exit (); } //判断文件类型 //上传文件 $_FILES ['userfile'] ['name'] = time () . "." . $tuozhanming; $upfile = '../uploads/' . $_FILES ['userfile'] ['name']; if ( !move_uploaded_file ( $_FILES ['userfile'] ['tmp_name'], $upfile )) { echo 'Problem: 文件移动失败'; exit (); } } function detectMIME($filename) { $file = fopen ( $filename, "rb" ); $finfo = finfo_open ( FILEINFO_MIME ); if (! $finfo) { // 直接读取文件的前4个字节,根据硬编码判断 $file = fopen ( $filename, "rb" ); $bin = fread ( $file, 4 ); //只读文件头4字节 fclose ( $file ); $strInfo = @unpack ( "C4chars", $bin ); //dechex() 函数把十进制转换为十六进制。 $typeCode = dechex ( $strInfo ['chars1'] ) . dechex ( $strInfo ['chars2'] ) . dechex ( $strInfo ['chars3'] ) . dechex ( $strInfo ['chars4'] ); $type = ''; switch ($typeCode) //硬编码值查表 { case "504b34" : $type = 'application/zip; charset=binary'; break; case "d0cf11e0" : $type = 'application/vnd.ms-office; charset=binary'; break; case "25504446" : $type = 'application/pdf; charset=binary'; break; default : $type = 'application/vnd.ms-office; charset=binary'; break; } } else { //finfo_file return information of a file $type = finfo_file ( $finfo, $filename ); } return $type; function getFileExt($filename, $type) { switch ($type) { case "application/zip; charset=binary" : $extType = "docx"; break; case "application/vnd.ms-office; charset=binary" : $extType = "doc"; break; case "application/msword; charset=binary" : $extType = "doc"; break; case "application/pdf; charset=binary" : $extType = "pdf"; break; default : $extType = "type_error"; break; } return $extType; }

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









Workerman ドキュメントでファイルのアップロードとダウンロードを実装するには、特定のコード サンプルが必要です はじめに: Workerman は、シンプル、効率的、使いやすい高性能 PHP 非同期ネットワーク通信フレームワークです。実際の開発では、ファイルのアップロードとダウンロードが一般的な機能要件となりますが、この記事では、Workerman フレームワークを使用してファイルのアップロードとダウンロードを実装する方法と、具体的なコード例を紹介します。 1. ファイル アップロード: ファイル アップロードとは、ローカル コンピューター上のファイルをサーバーに転送する操作を指します。以下が使用されます

Laravel を使用してファイルのアップロードおよびダウンロード機能を実装する方法 Laravel は、Web アプリケーションの開発をより簡単かつ効率的にするための豊富な機能とツールを提供する人気のある PHP Web フレームワークです。よく使用される機能の 1 つは、ファイルのアップロードとダウンロードです。この記事では、Laravelを使用してファイルのアップロードおよびダウンロード機能を実装する方法と、具体的なコード例を紹介します。ファイルのアップロード ファイルのアップロードとは、ローカル ファイルを保存するためにサーバーにアップロードすることを指します。 Laravelではファイルアップロードを使用できます

Java ファイルアップロード例外 (FileUploadException) を解決する方法 Web 開発でよく遭遇する問題の 1 つは、FileUploadException (ファイル アップロード例外) です。この問題は、ファイル サイズが制限を超えている、ファイル形式が一致していない、サーバー構成が正しくないなど、さまざまな理由で発生する可能性があります。この記事では、これらの問題を解決するいくつかの方法について説明し、対応するコード例を示します。アップロードされるファイルのサイズを制限する ほとんどのシナリオでは、ファイル サイズを制限します

gRPC を使用してファイルのアップロードを実装するにはどうすればよいですか?リクエストおよびレスポンスメッセージを含むサポートサービス定義を作成します。クライアントでは、アップロードされるファイルが開かれてチャンクに分割され、gRPC ストリーム経由でサーバーにストリーミングされます。サーバー側では、ファイル チャンクが受信され、ファイルに保存されます。ファイルのアップロードが完了すると、サーバーはアップロードが成功したかどうかを示す応答を送信します。

Laravel でのファイルのアップロードと処理: ユーザーがアップロードしたファイルの管理 はじめに: ファイルのアップロードは、最新の Web アプリケーションにおける非常に一般的な機能要件です。 Laravel フレームワークでは、ファイルのアップロードと処理が非常にシンプルかつ効率的になります。この記事では、ファイルアップロードの検証、保存、処理、表示など、Laravelでユーザーがアップロードしたファイルを管理する方法を紹介します。 1. ファイルのアップロード ファイルのアップロードとは、クライアントからサーバーにファイルをアップロードすることを指します。 Laravel では、ファイルのアップロードは非常に簡単に処理できます。初め、

PHP を使用して FTP ファイル アップロード プログレス バーを実装する方法 1. 背景の紹介 Web サイト開発では、ファイル アップロードは一般的な機能です。大きなファイルのアップロードでは、ユーザー エクスペリエンスを向上させるために、多くの場合、ファイルのアップロード プロセスをユーザーに知らせるために、アップロードの進行状況バーを表示する必要があります。この記事では、PHPを使用してFTPファイルアップロードのプログレスバー機能を実装する方法を紹介します。 2. FTP ファイルアップロードのプログレスバー実装の基本的な考え方. FTP ファイルアップロードのプログレスバーは通常、アップロードされたファイルのサイズとアップロードされたファイルのサイズを計算することによって計算されます。

PHP ファイル アップロード ガイド: move_uploaded_file 関数を使用してアップロードされたファイルを処理する方法 Web アプリケーションの開発では、ファイルのアップロードが一般的な要件です。 PHP には、アップロードされたファイルを処理するための便利な関数 move_uploaded_file() が用意されています。この記事では、この機能を使ってファイルアップロード機能を実装する方法を紹介します。 1. 準備 開始する前に、PHP 環境がファイルアップロードパラメータで設定されていることを確認してください。これを行うには、php.in を開いてください。

回答: はい、Golang はファイルのアップロード処理を簡素化する機能を提供します。詳細: MultipartFile タイプは、ファイルのメタデータとコンテンツへのアクセスを提供します。 FormFile 関数は、フォーム要求から特定のファイルを取得します。 ParseForm 関数と ParseMultipartForm 関数は、フォーム データとマルチパート フォーム データを解析するために使用されます。これらの機能を使用すると、ファイル処理プロセスが簡素化され、開発者はビジネス ロジックに集中できるようになります。
