PHPでファイルをアップロードする際のファイルタイプの制限方法
PHPでアップロードファイルの種類を制限するには、以下のような方法があります。
- 拡張子で制限をかける: pathinfo() 関数でアップロードされるファイルの拡張子を調べ、許可されたファイルの拡張子と比較し、もし許可されたファイルの拡張子のリストに含まれていなければアップロードを拒否します。たとえば:
- $allowedTypes = array(‘jpg’, ‘jpeg’, ‘png’, ‘gif’);
$_FILES[‘file’][‘name’] から PATHINFO_EXTENSION を使ってファイル拡張子を取得する。
その拡張子が $allowedTypes に含まれない場合、”jpg, jpeg, png, gif ファイルのみアップロードできます。” と表示して終了する。 - MIMEタイプによる制限:
$_FILES[‘file’][‘type’] でアップロードファイルの MIME タイプを取得し、許可された MIME タイプと比較する。許可された MIME タイプのリストにない場合、アップロードを拒否する。例: - $allowedMimeTypes = array(‘image/jpeg’, ‘image/png’, ‘image/gif’);
$fileMimeType = $_FILES[‘file’][‘type’];if(!in_array($fileMimeType, $allowedMimeTypes)){
echo “アップロード可能なファイルは画像ファイルのみです”; // 変更点
exit;
} - ファイルの種類を総合的に判断する:サフィックスとMIMEタイプを組み合わせて使用し、安全性向上。具体的には、まずサフィックスによる制限判断を行い、さらにMIMEタイプによる制限判断を行う。例えば:
- if (isset($_FILES[‘file’]) && $_FILES[‘file’][‘error’] == 0) {
$allowedTypes = array(‘jpg’, ‘jpeg’, ‘png’, ‘gif’);
$allowedMimeTypes = array(‘image/jpeg’, ‘image/png’, ‘image/gif’);
$fileExtension = pathinfo($_FILES[‘file’][‘name’], PATHINFO_EXTENSION);
$fileMimeType = $_FILES[‘file’][‘type’];if (!in_array($fileExtension, $allowedTypes) || !in_array($fileMimeType, $allowedMimeTypes)) {
echo ‘只允许上传图片文件’;
exit;
}
}
アップロード前にこれらの方法で判定が可能ですので、要件を満たしていない場合は、アップロードを拒否してください。