Advertisement
  1. Code
  2. PHP

So laden Sie eine Datei in PHP hoch (mit einem Beispiel)

by
Read Time:11 minsLanguages:

German (Deutsch) translation by Alex Grigorovich (you can also view the original English article)

In diesem Artikel erkläre ich die Grundlagen des Datei-Uploads in PHP. Zuerst gehen wir die PHP-Konfigurationsoptionen durch, die für erfolgreiche Datei-Uploads vorhanden sein müssen. Anschließend entwickeln wir ein reales Beispiel zum Hochladen einer Datei.

PHP-Einstellungen konfigurieren

Es gibt einige PHP-Konfigurationseinstellungen, die Sie im Voraus für erfolgreiche Datei-Uploads überprüfen sollten. In diesem Abschnitt werden wir jede einzelne Option durchgehen, die in Bezug auf das Hochladen von PHP-Dateien wichtig ist. Diese Optionen können in der Datei php.ini konfiguriert werden.

Wenn Sie nicht sicher sind, wo Sie Ihre php.ini-Datei finden, können Sie sie mit php_ini_loaded_file() finden. Erstellen Sie einfach eine PHP-Datei auf Ihrem Server mit der folgenden Zeile und öffnen Sie sie über den Browser.

Hier ist ein Auszug aus einer Setup-Datei mit einigen nützlichen Voreinstellungen.

Die Schlüsseleinstellungen

file_uploads

Der Wert der file_uploads-Direktive sollte auf On gesetzt werden, um Datei-Uploads zuzulassen. Der Standardwert dieser Direktive ist On.

upload_max_filesize

Mit der upload_max_filesize-Direktive können Sie die maximale Größe der hochgeladenen Datei konfigurieren. Standardmäßig ist es auf 2M (zwei Megabyte) eingestellt, und Sie können diese Einstellung auch mit der .htaccess-Datei überschreiben. Zwei Megabyte sind nach heutigen Maßstäben nicht sehr viel, daher müssen Sie diese möglicherweise erhöhen. Wenn Sie beim Versuch, eine Datei hochzuladen, eine Fehlermeldung erhalten, dass die file exceeds upload_max_filesize, müssen Sie diesen Wert erhöhen. Stellen Sie in diesem Fall sicher, dass Sie auch post_max_size erhöhen (siehe unten).

upload_tmp_dir

Legen Sie ein temporäres Verzeichnis fest, das zum Speichern hochgeladener Dateien verwendet wird. In den meisten Fällen brauchen Sie sich um diese Einstellung nicht zu kümmern. Wenn Sie es nicht festlegen, wird das standardmäßige temporäre Verzeichnis des Systems verwendet.

post_max_size

Mit der Direktive post_max_size können Sie die maximale Größe von POST-Daten konfigurieren. Da Dateien mit POST-Anfragen hochgeladen werden, muss dieser Wert größer sein als der, den Sie für die upload_max_filesize-Direktive festgelegt haben. Wenn Ihre upload_max_filesize beispielsweise 16M (16 MB) beträgt, möchten Sie post_max_size möglicherweise auf 20M setzen.

max_file_uploads

Hier können Sie die maximale Anzahl von Dateien festlegen, die gleichzeitig hochgeladen werden können. Der Standardwert ist 20, ein sinnvoller Betrag.

max_input_time

Dies ist die maximale Anzahl von Sekunden, die ein Skript die Eingabedaten analysieren darf. Sie sollten ihn auf einen angemessenen Wert einstellen, wenn Sie mit großen Datei-Uploads zu tun haben. 60 (60 Sekunden) ist für die meisten Apps ein guter Wert.

memory_limit

Die Direktive memory_limit gibt die maximale Speichermenge an, die ein Skript verbrauchen kann. Wenn beim Hochladen großer Dateien Probleme auftreten, müssen Sie sicherstellen, dass der Wert dieser Anweisung höher ist als der Wert, den Sie für die Anweisung post_max_size festgelegt haben. Der Standardwert ist 128M (128 Megabyte). Wenn Sie also keine sehr großen post_max_size und upload_max_filesize haben, müssen Sie sich darüber keine Gedanken machen.

max_execution_time

Dies ist die maximale Anzahl von Sekunden, die ein Skript ausführen darf. Wenn beim Hochladen großer Dateien Probleme auftreten, können Sie diesen Wert erhöhen. 30 (30 Sekunden) sollte für die meisten Apps gut funktionieren.

Lassen Sie uns nun ein reales Beispiel erstellen, um das Hochladen von Dateien in PHP zu demonstrieren.

Erstellen Sie das HTML-Formular

Nachdem Sie die PHP-Einstellungen konfiguriert haben, können Sie die Funktionen zum Hochladen von PHP-Dateien ausprobieren.

Unser GitHub-Repository enthält einige Beispielcodes, auf die ich in diesem Artikel eingehen werde. Wenn Sie also mitmachen möchten, laden Sie es von GitHub herunter.

Wir werden zwei PHP-Dateien erstellen: index.php und upload.php. Die Datei index.php enthält Code, der für die Anzeige des Datei-Upload-Formulars verantwortlich ist. Andererseits ist die Datei upload.php dafür verantwortlich, eine Datei auf den Server hochzuladen.

Außerdem wird eine Datei in das Verzeichnis uploaded_files hochgeladen, daher müssen Sie sicherstellen, dass dieser Ordner existiert und für den web-server-Benutzer beschreibbar ist.

In diesem Abschnitt gehen wir die wichtigsten Teile der Datei index.php durch.

Schauen wir uns die Datei index.php auf GitHub an:

Obwohl es wie ein typisches PHP-Formular aussehen mag, gibt es einen wichtigen Unterschied im Wert des enctype-Attributs des <form>-Tags. Es muss auf multipart/form-data gesetzt werden, da das Formular das Dateifeld enthält.

Das Attribut enctype gibt den Codierungstyp an, der beim Senden des Formulars verwendet werden soll, und nimmt einen der folgenden drei Werte an:

  • application/x-www-form-urlencoded: Dies ist der Standardwert, wenn Sie den Wert des Attributs enctype nicht explizit festlegen. In diesem Fall werden Zeichen verschlüsselt, bevor sie an den Server gesendet werden. Wenn das Dateifeld in Ihrem Formular nicht vorhanden ist, sollten Sie diesen Wert für das Attribut enctype verwenden.
  • multipart/form-data: Wenn Sie den Wert multipart/form-data für das enctype-Attribut verwenden, können Sie Dateien mit der POST-Methode hochladen. Außerdem wird sichergestellt, dass die Zeichen beim Absenden des Formulars nicht codiert werden.
  • text/plain: Dies wird im Allgemeinen nicht verwendet. Bei dieser Einstellung werden die Daten unverschlüsselt gesendet.

Als nächstes geben wir das Dateifeld aus, in dem Sie eine Datei von Ihrem Computer auswählen können.

Abgesehen davon haben wir oben im Formular eine Nachricht angezeigt. Diese Nachricht zeigt den Status des Datei-Uploads an und wird vom Skript upload.php in eine Sitzungsvariable gesetzt. Wir werden uns dies im nächsten Abschnitt genauer ansehen.

Das fasst die Datei index.php zusammen. Im nächsten Abschnitt werden wir sehen, wie die hochgeladene Datei auf der Serverseite behandelt wird.

Erstellen Sie die Upload-Logik

Im vorherigen Abschnitt haben wir das HTML-Formular erstellt, das auf der Client-Seite angezeigt wird und es Ihnen ermöglicht, eine Datei von Ihrem Computer hochzuladen. In diesem Abschnitt sehen wir das serverseitige Gegenstück, mit dem Sie die hochgeladene Datei verarbeiten können.

Ziehen Sie den Code aus der Datei upload.php auf GitHub. Wir werden die wichtigen Teile dieser Datei durchgehen.

In der Datei upload.php haben wir zunächst überprüft, ob es sich um eine gültige POST-Anfrage handelt.

In PHP wird beim Hochladen einer Datei die superglobale Variable $_FILES mit allen Informationen über die hochgeladene Datei gefüllt. Es wird als Array initialisiert und kann die folgenden Informationen für einen erfolgreichen Datei-Upload enthalten.

  • tmp_name: Der temporäre Pfad, in den die Datei hochgeladen wird, wird in dieser Variable gespeichert.
  • name: In dieser Variable wird der eigentliche Name der Datei gespeichert.
  • size: Gibt die Größe der hochgeladenen Datei in Bytes an.
  • type: Enthält den MIME-Typ der hochgeladenen Datei.
  • error: Wenn beim Datei-Upload ein Fehler auftritt, wird diese Variable mit der entsprechenden Fehlermeldung gefüllt. Bei erfolgreichem Dateiupload enthält sie 0, die Sie mit der Konstante UPLOAD_ERR_OK vergleichen können.

Nach der Validierung der POST-Anfrage überprüfen wir, ob der Datei-Upload erfolgreich war.

Sie sehen, dass die Variable $_FILES ein mehrdimensionales Array ist, das erste Element der Name des Dateifelds ist und das zweite Element die Informationen über die hochgeladene Datei enthält, wie wir gerade oben besprochen haben.

Wenn der Datei-Upload erfolgreich ist, initialisieren wir einige Variablen mit Informationen über die hochgeladene Datei.

Im obigen Snippet haben wir auch die Erweiterung der hochgeladenen Datei ermittelt und in der Variablen $fileExtension gespeichert.

Da die hochgeladene Datei Leerzeichen und andere Sonderzeichen enthalten kann, ist es besser, den Dateinamen zu bereinigen, und genau das haben wir im folgenden Ausschnitt getan.

Es ist wichtig, dass Sie den Dateityp, der hochgeladen werden kann, auf bestimmte Erweiterungen beschränken und nicht alles über das Upload-Formular zulassen. Dazu haben wir die Erweiterung der hochgeladenen Datei mit einer Reihe von Erweiterungen überprüft, die wir für das Hochladen zulassen möchten.

Schließlich verwenden wir die Funktion move_uploaded_file, um die hochgeladene Datei an einen bestimmten Ort unserer Wahl zu verschieben.

Die Funktion move_uploaded_file benötigt zwei Argumente. Das erste Argument ist der Dateiname der hochgeladenen Datei und das zweite Argument ist der Zielpfad, in den Sie die Datei verschieben möchten.

Schließlich leiten wir den Benutzer zur Datei index.php weiter. Außerdem setzen wir in der Session-Variablen die entsprechende Meldung, die den Benutzern nach der Umleitung in der Datei index.php angezeigt wird.

So funktioniert alles zusammen

Vergessen Sie nicht, das Verzeichnis uploaded_files zu erstellen und es für den web-server-Benutzer beschreibbar zu machen. Als nächstes führen Sie die Datei index.php aus, die das Datei-Upload-Formular anzeigen sollte, das wie folgt aussieht:

Indexphp File OutputIndexphp File OutputIndexphp File Output

Klicken Sie auf die Schaltfläche Durchsuchen – das sollte ein Dialogfeld öffnen, in dem Sie eine Datei von Ihrem Computer auswählen können. Wählen Sie eine Datei mit einer der in unserem Skript zulässigen Erweiterungen aus und klicken Sie auf die Schaltfläche Hochladen.

Das sollte das Formular absenden, und wenn alles gut geht, sollten Sie die hochgeladene Datei im Verzeichnis uploaded_files sehen. Sie können auch versuchen, andere Dateien mit unzulässigen Erweiterungen hochzuladen und prüfen, ob unser Skript solche Uploads verhindert.

Abschluss

Heute haben wir die Grundlagen des Datei-Uploads in PHP besprochen. In der ersten Hälfte des Artikels haben wir die verschiedenen Konfigurationsoptionen besprochen, die vorhanden sein müssen, damit der Datei-Upload funktioniert. Dann haben wir uns ein reales Beispiel angesehen, das demonstriert, wie das Hochladen von Dateien in PHP funktioniert.

Ich hoffe, Ihnen hat dieser Artikel gefallen und können Sie Ihre Fragen und Vorschläge unten posten!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.