Forum und email

is_uploaded_file

(PHP 4 >= 4.0.3, PHP 5)

is_uploaded_file — Zistí, či bol súbor uploadnutý cez HTTP POST

Popis

bool is_uploaded_file ( string $názovsúboru )

Vráti TRUE, ak súbor zadaný v parametri názovsúboru bol uploadnutý cez HTTP POST. To je užitočné v prípadoch, keď je potrebné uistiť sa, že sa zlomyseľný užívateľ nepokúša oklamať skript tak, aby pracoval na nepovolených či nežiadúcich súboroch - napr. na /etc/passwd.

Tento spôsob kontroly je dôležitý najmä v prípadoch, keď manipulácia s uploadnutnými súbormi môže odhaliť ich obsah užívateľovi, či dokonca ostatným užívateľom systému.

is_uploaded_file() je dostupná len v PHP 3 po PHP 3.0.16 a v PHP 4 po verzii 4.0.2. Ak používate staršie verzie, na ochranu môžete použiť nasledovnú funkciu:

Note: Nasledovný príklad nepracuje v PHP 4 verzie 4.0.2 a novšej. Je to spôsobené internou funkcionalitou PHP, ktorá bola po tejto verzii upravené.

<?php
/* Kontrola uploadnutých súborov. */
function is_uploaded_file($filename) {
    if (!
$tmp_file get_cfg_var('upload_tmp_dir')) {
        
$tmp_file dirname(tempnam(''''));
    }
    
$tmp_file .= '/' basename($filename);
    
/* užívateľ môže mať koncovú lomku '/' v php.ini... */
    
return (ereg_replace('/+''/'$tmp_file) == $filename);
}

/* Bude sa to používať takto, pretože v starších verziách
 * nie je ani move_uploaded_file(): */
if (is_uploaded_file($HTTP_POST_FILES['userfile'])) {
    
copy($HTTP_POST_FILES['userfile'], "/place/to/put/uploaded/file");
} else {
    echo 
"Možný útok cez uploadnutý súbor: '$HTTP_POST_FILES[userfile]'.";
}
?>

Pozri tiež move_uploaded_file() a sekciu Práca s uploadnutými súbormi ktorá obsahuje aj niekoľko jednoduchých príkladov.