W3docs

is_uploaded_file()

Die Funktion is_uploaded_file() prüft, ob eine Datei per HTTP POST hochgeladen wurde, und gibt true zurück, wenn dies der Fall ist.

Die Funktion is_uploaded_file() prüft, ob eine angegebene Datei über eine HTTP-POST-Anfrage hochgeladen wurde. Sie ist eines der wichtigsten Sicherheitswerkzeuge von PHP für Datei-Uploads: Sie ermöglicht es zu bestätigen, dass ein Pfad wirklich auf eine temporäre Datei zeigt, die PHP selbst aus der aktuellen Anfrage erstellt hat – und nicht auf einen beliebigen Pfad, den ein Angreifer in Ihr Skript eingeschleust haben könnte.

Dieses Kapitel behandelt die Syntax, ein funktionierendes Beispiel, das Sicherheitsproblem, das die Funktion löst, sowie typische Fallstricke.

Syntax

is_uploaded_file(string $filename): bool
  • $filename — der zu prüfende Pfad. In der Praxis ist dies immer ein Wert aus $_FILES['...']['tmp_name'].
  • Rückgabewerttrue, wenn $filename eine hochgeladene Datei aus der aktuellen Anfrage ist, andernfalls false.

Die Funktion gibt nur true für den temporären Dateinamen zurück, den PHP während des Uploads vergeben hat. Die Übergabe eines selbst erstellten Pfades (z. B. des endgültigen Ziels nach dem Verschieben der Datei) gibt false zurück.

Einfaches Beispiel

<?php

$file = $_FILES['file']['tmp_name'];

if (is_uploaded_file($file)) {
    echo 'The file was uploaded via HTTP POST.';
} else {
    echo 'The file was NOT uploaded via HTTP POST.';
}

Hier ist $_FILES['file'] der Eintrag, der erstellt wird, wenn ein Formularfeld namens file mit enctype="multipart/form-data" übermittelt wird. Der Schlüssel tmp_name enthält den serverseitigen temporären Pfad, und is_uploaded_file() bestätigt, dass dieser wirklich aus der Anfrage stammt.

Warum die Funktion existiert (Sicherheit)

Ohne diese Prüfung könnte ein Angreifer ein normales Formularfeld (keine Datei) übermitteln, dessen Wert ein Serverpfad wie /etc/passwd ist. Wenn Ihr Code diesem String blind vertraut und ihn dann liest oder kopiert, würden Systemdateien exponiert. is_uploaded_file() schützt davor, indem es true nur für Dateien zurückgibt, die PHP selbst als Uploads in der aktuellen Anfrage empfangen hat.

Ein sicherer Upload-Handler validiert die Datei, bevor er damit arbeitet:

<?php

if (
    isset($_FILES['file']) &&
    $_FILES['file']['error'] === UPLOAD_ERR_OK &&
    is_uploaded_file($_FILES['file']['tmp_name'])
) {
    $destination = __DIR__ . '/uploads/' . basename($_FILES['file']['name']);

    if (move_uploaded_file($_FILES['file']['tmp_name'], $destination)) {
        echo 'File stored safely.';
    } else {
        echo 'Failed to move the uploaded file.';
    }
} else {
    echo 'No valid upload received.';
}

Beachten Sie, dass move_uploaded_file() dieselbe is_uploaded_file()-Prüfung intern durchführt und daher die bevorzugte Methode zum Verschieben von Uploads ist. Verwenden Sie is_uploaded_file() direkt, wenn Sie die temporäre Datei vor dem Verschieben inspizieren oder lesen müssen.

is_uploaded_file() vs. move_uploaded_file()

FunktionWas sie tut
is_uploaded_file()Gibt einen booleschen Wert zurück, der bestätigt, dass der Pfad ein Upload der aktuellen Anfrage ist. Berührt die Datei nicht.
move_uploaded_file()Prüft dasselbe und verschiebt dann die temporäre Datei an ein Ziel. Schlägt fehl (gibt false zurück), wenn die Quelle kein echter Upload ist.

Häufige Fallstricke

  • Immer tmp_name übergeben, niemals den endgültigen Pfad. Nachdem Sie eine Datei mit move_uploaded_file() verschoben haben, existiert die temporäre Datei nicht mehr, sodass eine erneute Prüfung false zurückgibt.
  • Die Prüfung ist anfragespezifisch. Ein Pfad, der in einer vorherigen Anfrage ein Upload war, ist in der aktuellen nicht gültig.
  • Es validiert keinen Inhalt. is_uploaded_file() sagt nichts über Typ oder Größe der Datei aus. Validieren Sie $_FILES['file']['size'], den MIME-Typ und die Erweiterung separat, bevor Sie Benutzerdaten vertrauen.
  • Prüfen Sie zuerst den Fehlercode. Prüfen Sie $_FILES['file']['error'] === UPLOAD_ERR_OK, bevor Sie is_uploaded_file() aufrufen; ein fehlgeschlagener Upload kann tmp_name leer lassen.

Verwandte Funktionen

Zusammenfassung

is_uploaded_file() gibt true nur für die temporäre Datei zurück, die PHP aus einem HTTP-POST-Upload in der aktuellen Anfrage erstellt hat. In Kombination mit dem Upload-Fehlercode und der Inhaltsvalidierung bildet sie die Grundlage für sicheres Datei-Handling in PHP. In den meisten Fällen lässt man move_uploaded_file() die Prüfung übernehmen und greift nur dann direkt auf is_uploaded_file() zurück, wenn die temporäre Datei vor dem Verschieben gelesen werden muss.

Übungen

Übung
Was ist die Funktion von is_uploaded_file() in PHP?
Was ist die Funktion von is_uploaded_file() in PHP?
Was this page helpful?