2010-03-30 5 views
6

J'ai un formulaire de téléchargement avec un fichier à télécharger. La question que j'ai est que même si aucun fichier téléchargé if (isset ($ _ FILES)) OU si passe encore le succès (vide ($ _ FILES)!):isset et! Vide ne passant pas par une vérification des fichiers téléchargés

$_FILES = $HTTP_POST_FILES; 
if($_POST['type'] == 'photo' && isset($_FILES)){ 
// returns true even if no file is uploaded. What am I missing! 
} 
+0

Utiliser '$ HTTP_ POST_FILES' est obsolète: http://php.net/manual/fr/reserved.variables.files.php (en plus de cela il contient les mêmes valeurs que '$ _FILES') –

Répondre

11

Être superglobale, $_FILES est probablement toujours défini, que le fichier téléchargé existe ou non.

Vérifiez le (s) téléchargement (s) de fichier auquel vous vous attendez et regardez le champ de taille. (Apparemment, selon les notes des utilisateurs dans le manuel, si le formulaire contient l'élément de chargement, il est possible que même isset($_FILES["my_file_name"]) retourne vrai même si il n'y avait pas de fichier sélectionné

Cela devrait fonctionner de manière fiable.

if($_POST['type'] == 'photo' && 
    ((isset($_FILES["my_file_name"]["size"]) && 
    ($_FILES["my_file_name"]["size"] > 0))){ 

(le isset() est d'empêcher un "undefined index" préavis.)

Que faites-vous cela pour, par la voie ?:

$_FILES = $HTTP_POST_FILES; 
+0

Je l'avais déjà avant mais c'était un peu long : $ _FILES ['image'] ['tmp_name'] ... Vous savez que je n'ai aucune idée de cette deuxième ligne. $ _FILES = $ HTTP_POST_FILES; C'était l'une des trois parties écrites par quelqu'un d'autre. – kalpaitch

+0

@kalpaitch Je pense que vous pouvez supprimer cette partie en toute sécurité, c'était probablement pour rétrocompatibilité en PHP 4. –

+0

@kalpaitch vérification de tmp_name est également très bien. –

Questions connexes