Manuel PHP

is_uploaded_file

(PHP 4 >= 4.0.3, PHP 5)

is_uploaded_file — Indique si le fichier a été téléchargé par HTTP POST

Description

bool is_uploaded_file ( string $filename )

is_uploaded_file() est disponible à partir des versions PHP 3.0.16 et 4.0.2.

is_uploaded_file() retourne TRUE si le fichier filename a été téléchargé par HTTP POST. Cela est très utile pour vous assurer qu'un utilisateur n'essaie pas d'accéder intentionnellement à un fichier auquel il n'a pas droit (comme /etc/passwd).

Ce type de vérification est spécialement important s'il est possible que les fichiers téléchargés révèlent leur contenu à l'utilisateur, ou même aux utilisateurs du même système.

Pour un fonctionnement correct, la fonction is_uploaded_file() nécessite un argument comme $_FILES['userfile']['tmp_name'], - le nom du fichier téléchargé sur la machine cliente $_FILES['userfile']['name'] ne fonctionne pas.

Example#1 Exemple avec is_uploaded_file()

  1. <?php
  2.  
  3. if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { 
  4.    echo "Fichier ". $_FILES['userfile']['name'] ." téléchargé avec succès.\n"; 
  5.    echo "Affichage du contenu\n"; 
  6.    readfile($_FILES['userfile']['tmp_name']);  
  7. } else { 
  8.    echo "Attaque possible par téléchargement de fichier : "; 
  9.    echo "Nom du fichier : '". $_FILES['userfile']['tmp_name'] . "'.";  
  10. }  
  11.  
  12. ?> 

is_uploaded_file() est disponible dans les versions de PHP 3 après PHP 3.0.16, et dans les versions de PHP 4 après la 4.0.2. Si vous êtes coincés avec une version plus ancienne, vous pouvez utiliser l'une des fonctions suivantes pour vous protéger :

Note: L'exemple suivant ne fonctionne pas avec les versions de PHP ultérieures à la 4.0.2. Elle dépend de fonctionnalités internes de PHP qui ont disparu après cette version.

Example#2 Exemple avec is_uploaded_file() en PHP 4 < 4.0.3.

  1. <?php
  2. /* Test utilisateur du fichier téléchargé. */  
  3. function is_uploaded_file_4_0_2($filename) { 
  4.    if (!$tmp_file = get_cfg_var('upload_tmp_dir')) { 
  5.       $tmp_file = dirname(tempnam('', '')); 
  6.    } 
  7.    $tmp_file .= '/' . basename($filename); 
  8.    /* L'utilisateur peut avoir laissé des / finaux dans php.ini... */ 
  9.    return (ereg_replace('/+', '/', $tmp_file) == $filename);  
  10. }  
  11.  
  12. /* Voici comment l'utiliser, car move_uploaded_file() n'est pas disponible
  13. dans les anciennes versions : */  
  14. if (is_uploaded_file_4_0_2($HTTP_POST_FILES['userfile'])) { 
  15.    copy($HTTP_POST_FILES['userfile'], "/dossier/ou/placer/un/fichier/uploadé");  
  16. } else { 
  17.    echo "Tentative d'attaque possible : '$HTTP_POST_FILES[userfile]'.";  
  18. }  
  19. ?> 

Voir aussi move_uploaded_file(), et la section sur la gestion des téléchargements pour un exemple simple.


Remonter Remonter
L'éditeur javascript - CSS - Gentoo - Tutoriaux PHP - Tutoriels PHP - Breizh Blog