Position actuelle: Accueil> Derniers articles> La bonne façon de lire les informations du fichier à l'aide de Finfo

La bonne façon de lire les informations du fichier à l'aide de Finfo

gitbox 2025-05-29

Dans PHP, FINFO est une extension très pratique pour obtenir des méta-informations telles que le type MIME, le codage, etc. d'un fichier. Par rapport à la fonction traditionnelle MIME_CONTENT_TYPE () , FINFO offre des fonctions plus précises et flexibles. L'utilisation correcte de FINFO peut effectivement empêcher les déguisements de type de fichiers et améliorer la sécurité du traitement des fichiers. Cet article introduira en détail plusieurs façons correctes d'utiliser FINFO et des précautions communes.

1. Utilisez Finfo pour obtenir l'utilisation de base du type MIME

L'utilisation la plus courante consiste à obtenir le type de mime d'un fichier, tel que déterminer si un fichier téléchargé est une image ou un PDF.

 <?php
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->file('/path/to/file.pdf');
echo $mimeType;

Dans le code ci-dessus, FileInfo_mime_Type dit à FINFO qu'il renvoie un type MIME, tel que l'application / PDF ou l'image / JPEG . C'est le moyen standard de juger les types de fichiers.

2. Obtenez le type de mime de la chaîne

Parfois, le contenu du fichier n'est pas nécessairement enregistré sur le disque, mais est transmis par des variables, telles que le téléchargement par API. Vous pouvez utiliser la méthode Finfo_Buffer :

 <?php
$finfo = new finfo(FILEINFO_MIME_TYPE);
$data = file_get_contents('https://gitbox.net/sample.png');
$mimeType = $finfo->buffer($data);
echo $mimeType;

Cette méthode convient au traitement des données de streaming ou du contenu rampant à distance.

3. Traitement en combinaison avec le téléchargement de fichiers

L'application typique de FINFO dans le téléchargement de fichiers est de vérifier si le contenu du fichier correspond à l'extension, empêchant ainsi les utilisateurs de télécharger des fichiers de script malveillants sous forme d'images.

 <?php
if ($_FILES['upload']['error'] === UPLOAD_ERR_OK) {
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $mimeType = $finfo->file($_FILES['upload']['tmp_name']);
    
    $allowedTypes = [
        'image/jpeg' => 'jpg',
        'image/png'  => 'png',
        'application/pdf' => 'pdf',
    ];
    
    if (!array_key_exists($mimeType, $allowedTypes)) {
        die('Types de fichiers non pris en charge。');
    }
    
    $ext = $allowedTypes[$mimeType];
    move_uploaded_file($_FILES['upload']['tmp_name'], "/uploads/file.$ext");
}

En comparant le type de mime détecté par FINFO et la liste blanche prédéfinie, le téléchargement de fichiers illégal peut être effectivement empêché.

4. Précautions et problèmes communs

1. Ne comptez pas sur l'extension pour déterminer le type

Les extensions de fichiers sont facilement falsifiées et il n'est pas sûr de juger les types de fichiers uniquement en s'appuyant sur l'extension. Le contenu réel doit toujours être vérifié à l'aide de FINFO .

2. Assurez-vous d'activer l'extension FileInfo

Certaines versions plus anciennes des environnements PHP peuvent ne pas avoir d'extension FileInfo activée. Peut être vérifié par phpinfo () ou extension_loade ('fileInfo') .

 <?php
if (!extension_loaded('fileinfo')) {
    die('fileinfo Extension non activée');
}

3. Problèmes de chemin de fichier et d'autorisation

finfo-> file () exige que le fichier existe et ait des autorisations de lecture, sinon il peut renvoyer l'application / octet-stream ou false .

5. Utilisation avancée: Obtenez une description détaillée du mime

En plus de fileinfo_mime_type , vous pouvez également utiliser FileInfo_mime pour obtenir des informations plus détaillées, telles que le format de codage:

 <?php
$finfo = new finfo(FILEINFO_MIME);
$info = $finfo->file('/path/to/file.txt');
echo $info; // Par exemple text/plain; charset=us-ascii

Cette approche est particulièrement utile pour traiter des documents multilingues ou des conversions de codage.

6. Résumé

L'utilisation de FINFO est l'un des moyens les plus sûrs et les plus fiables d'identifier les types de fichiers dans PHP. Qu'il s'agisse de télécharger la vérification des fichiers, l'analyse des données distantes ou les tâches d'automatisation du système, la maîtrise et correctement à l'aide de FINFO peut apporter une stabilité et une sécurité plus élevées à l'application. Assurez-vous simplement d'activer l'extension FileInfo et de le combiner avec le jugement de liste blanche MIME pour créer un processus de traitement de fichiers plus robuste.