IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] Type MIME de fichiers à uploader


Sujet :

Langage PHP

  1. #1
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut [Upload] Type MIME de fichiers à uploader
    Salut,

    Je cherche à uploader des fichiers tar sur mon site. Je vérifie le type MIME du fichier pour n'autoriser que les tar. Seulement quand mon navigateur renvoie le type MIME correct ("application/x-tar") d'autres navigateurs m'envoie le fichier tar avec comme type MIME "application/octet-stream". Or ça peut être n'importe quoi!

    Comment puis-je vérrouiller mon upload?

    Et question subsidiaire, pourquoi ce type change? J'ai essayé sur différents navigateurs mais rien de concluant n'en est sorti.

    Merci par avance.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Tu ne peux pas te baser sur le type renvoyer par le client => plus généralement on ne peux avoir une confiance totale dans toutes données provenant du monde extérieur à ton appli !!!

    Tu as une fonction built-in de php pour detecter le mime type d'un fichier, tu as une extension pecl, un package pear, et tu peux executer la fonction shell "file -bi filename.tar" pour detecter du cote serveur le mime type.
    Sachant que pour ma part j'ai des problèmes avec ces méthodes concernant les document .ppt qui sont considérés comme des documents office ou word => du coup pour les cas particulier je fais des regles du style =>
    si l'extension du fichier est ppt et le mime type est office ou word alors le vrai mime type est powerpoint....

    Hope this helps

  3. #3
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Ah oui très bien, je n'y avais pas pensé, j'utilise déjà pear et je vais voir la fonction php.

    Merci pour tes indications.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  4. #4
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    J'ai finalement quelques problèmes pour gérer les types MIME.
    Je suis en hébergement mutualisé donc :
    - pas de shell
    - pas de pecl (fileinfo) installé
    - pas de magic_mime dans mon phpinfo qui est en plus déprécié au profit du package fileinfo de pecl

    Quant à pear ça a bien changé depuis le temps. Je n'ai qu'un seul fichier pear.php dans un simple répertoire et ça me suffisait. Là selon les packages j'aurais besoin de tout installé... Bref passons celà

    Concernant les packages pear, il y a MIME_Type pour gérer les types MIME que je pourrais coupler avec Archive_TAR (si je ne veux gérer que les tar) ou que je devrais coupler avec File_Archive (pour divers types d'archives) car il dépend de MIME_Type. Voici pour l'état des lieux.

    Maintenant mon interrogation. Dans le package MIME_Type il y a un fichier example.php qui illustre quelques méthodes que je n'ai pas encore testé car je ne vois pas comment leur donner le type MIME en argument!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
     
    ini_set('error_reporting', E_ALL);
    require 'MIME/Type.php';
    //require './Type.php';
     
    $type = 'application/x-test-app; foo="bar" (First argument); bar=baz (Second argument)';
    $type2 = 'application/vnd.pear.test-type';
     
    print "Checking type: $type\n";
    if (MIME_Type::isExperimental($type)) {
        print "Type is experimental\n";
    } else {
        print "Type is not experimental\n";
    }
     
    print "\nChecking type: $type2\n";
    if (MIME_Type::isVendor($type2)) {
        print "Type is vendor-specific\n";
    } else {
        print "Type is not vendor-specific\n";
    }
     
    $file = '@doc_dir@/@package@/example.php';
    print "\nChecking type of: $file\n";
    print MIME_Type::autoDetect($file)."\n";
     
    ?>
    Si je dois lui donner le type MIME avec $_FILES['fichier']['type'] je ne suis pas avancé!
    Est-ce bien ce que je dois faire et donc me trouver dans une impasse et me réduire à tester l'extension du fichier?
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  5. #5
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    En analysant le code de MIME_Type, si la fonction built-in de php (mime_content_type) est présente, il s'en sert, sinon il passe par le shell (file -bi $filename). C'est tout.

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    MIME_Type::autoDetect($file).; te renvoies le type normalement

  7. #7
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Je ne trouvais pas le package System_Command alors que je viens de tombé dessus en 30s ce matin et je ne voyais pas non plus qu'on passait un fichier à MIME_Type::autoDetect().
    Je vais arrêter de coder le soir.

    Merci pour tes réponses.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Définir taille et type d'un fichier uploadé
    Par Stéph utilisateur d'acces dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/08/2009, 10h57
  2. [Upload] Filtre sur les fichiers uploadés
    Par fantazya_z dans le forum Langage
    Réponses: 3
    Dernier message: 14/06/2007, 23h51
  3. [Upload] Tester présence de fichier uploadé
    Par jcaspar dans le forum Langage
    Réponses: 1
    Dernier message: 27/04/2007, 11h31
  4. [Upload] Suppression auto des fichiers uploadés
    Par silver.spike dans le forum Langage
    Réponses: 5
    Dernier message: 09/03/2007, 11h27
  5. [Upload] Où vont mes fichiers uploadés ?
    Par adlich dans le forum Langage
    Réponses: 3
    Dernier message: 30/04/2006, 22h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo