27 votes

Vérifier le fichier téléchargé est au format csv

Je suis le téléchargement d'un fichier en php et que vous souhaitez uniquement pour la télécharger si c'est un fichier csv. Je crois que ma syntaxe est bon pour le type de contenu. Il va toujours à l'instruction else quand c'est un fichier csv. Ce que je fais de mal ici?

if (($_FILES["file"]["type"] == "text/csv"))
{

}
else
{

}

Si je change le type de contenu qu'il fonctionne pour ce format tout simplement pas csv.

43voto

Alan Cole Points 1034

le type mime pourrait ne pas être text/csv certains systèmes peuvent lire/enregistrer différents. (par exemple parfois IE envoie .les fichiers csv en tant que application/vnd.ms-excel) de sorte que vous meilleur pari serait de construire un tableau de valeurs autorisées et test à l'encontre de qui, puis de trouver toutes les valeurs possibles à tester.

$mimes = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv');
if(in_array($_FILES['file']['type'],$mimes)){
  // do something
} else {
  die("Sorry, mime type not allowed");
}

si vous avez souhaité que vous pourriez ajouter un plus de vérifier si le mime est retourné en tant que text/plain, vous pouvez exécuter une preg_match vous assurer qu'il a suffisamment de virgules dans un csv.

28voto

ukliviu Points 1212

Il y a beaucoup de types MIME pour les fichiers CSV, en fonction de l'utilisateur de l'OS et la version de votre navigateur.

C'est de cette façon que j'ai actuellement de valider les types MIME de mes fichiers CSV:

$csv_mimetypes = array(
    'text/csv',
    'text/plain',
    'application/csv',
    'text/comma-separated-values',
    'application/excel',
    'application/vnd.ms-excel',
    'application/vnd.msexcel',
    'text/anytext',
    'application/octet-stream',
    'application/txt',
);

if (in_array($_FILES['upload']['type'], $csv_mimetypes)) {
    // possible CSV file
    // could also check for file content at this point
}

6voto

Eddie Points 3872

Vous ne pouvez pas toujours compter sur les types MIME..

Selon: http://filext.com/file-extension/CSV

text/comma-separated-values, text/csv, application/csv, application/excel, application/vnd.ms-excel, application/vnd.msexcel, text/anytext

Il existe différents types MIME pour les CSV.

Votre probablement le meilleur de la vérification de l'extension, de nouveau pas très fiable, mais, pour votre application, il peut être bien.

$info = pathinfo($_FILES['uploadedfile']['tmp_name']);

if($info['extension'] == 'csv'){
 // Good to go
}

Code non testé.

2voto

Vaibhav Shahu Points 63

Type Mime option n'est pas la meilleure option pour la validation de fichier CSV. J'ai utilisé ce code cela a bien fonctionné dans tous les navigateurs

$type = explode(".",$_FILES['file']['name']);
if(strtolower(end($type)) == 'csv'){

}
else
{

}

1voto

Garvin Points 176

Alors j'ai couru dans la présente aujourd'hui.

A été de tenter de valider un fichier CSV téléchargé MIME type en regardant $_FILES['upload_file']['type'], mais pour certains utilisateurs sur les différents navigateurs (et pas nécessairement les mêmes navigateurs entre les utilisateurs; par exemple, il a bien fonctionné pour moi dans FF, mais pour un autre utilisateur, il ne fonctionne pas sur FF) de l' $_FILES['upload_file']['type'] a été à venir comme "application/vnd.ms-excel" à la place de l' "text/csv" ou "text/plain".

J'ai donc eu recours à l'aide de l' (à mon humble avis) beaucoup plus fiable finfo_* fonctions quelque chose comme ceci:

$acceptable_mime_types = array('text/plain', 'text/csv', 'text/comma-separated-values');

if (!empty($_FILES) && array_key_exists('upload_file', $_FILES) && $_FILES['upload_file']['error'] == UPLOAD_ERR_OK) {
    $tmpf = $_FILES['upload_file']['tmp_name'];

    // Make sure $tmpf is kosher, then:

    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime_type = finfo_file($finfo, $tmpf);

    if (!in_array($mime_type, $acceptable_mime_types)) {
        // Unacceptable mime type.
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X