Forum und email

is_uploaded_file

(PHP 4 >= 4.0.3, PHP 5)

is_uploaded_file — Prüft, ob die Datei mittels HTTP POST upgeloaded wurde

Beschreibung

bool is_uploaded_file ( string $filename )

Gibt TRUE zurück, wenn die Datei filename mittels HTTP POST upgeloaded wurde. Das ist hilfreich sicherzustellen, dass kein böswilliger User versucht hat das Script zu überlisten, indem er es Dateien bearbeiten lässt, die es gar nicht bearbeiten sollte. Zum Beispiel /etc/passwd.

Diese Prüfung ist speziell dort interessant, wo irgendeine Aktion mit upgeloadeten Dateien deren Inhalt dem User zugänglich machen könnte (oder auch anderen Usern auf dem selben System).

is_uploaded_file() ist in PHP 3 nur nach Version 3.0.16, und in PHP 4 nur nach Version 4.0.2 verfügbar. Sollten Sie eine frühere Version benutzen, können Sie sich mit der folgenden Funktion weiterhelfen:

Hinweis: Das folgende Beispiel funktioniert nicht in Versionen nach PHP 4.0.2. Das liegt an der internen Funktionalität von PHP, welche sich nach dieser Version geändert hat.

<?php
/* Userland Test für hochgeladene Datei. */
function is_uploaded_file($filename) {
    if (!
$tmp_file get_cfg_var('upload_tmp_dir')) {
        
$tmp_file dirname(tempnam(''''));
    }
    
$tmp_file .= '/' basename($filename);
    
/* Der Benutzer könnte einen führenden Slash in php.ini haben... */
    
return (ereg_replace('/+''/'$tmp_file) == $filename);
}

/* So verwenden Sie sie, nachdem Sie in diesen älteren
 * Versionen auch keine move_uploaded_file() haben: */
if (is_uploaded_file($HTTP_POST_FILES['userfile'])) {
    
copy($HTTP_POST_FILES['userfile'], "/place/to/put/uploaded/file");
} else {
    echo 
"Mögliche Dateiupload-Attacke: Dateiname '$HTTP_POST_FILES[userfile]'.";
}
?>

Siehe auch move_uploaded_file(), und das Kapitel Steuerung von Dateiuploads für ein einfaches Anwendungsbeispiel.