Heim > Backend-Entwicklung > PHP-Tutorial > phpmaster | Hochladen von Dateien mit PHP

phpmaster | Hochladen von Dateien mit PHP

William Shakespeare
Freigeben: 2025-03-03 08:28:10
Original
619 Leute haben es durchsucht

phpmaster | Uploading Files with PHP

PHP -Datei Upload: Erstellen Sie ein sicheres und zuverlässiges Upload -System

Online -Albumbilder, E -Mail -Anhänge und Batch -Verarbeitungsanwendungsdatendateien haben eines gemeinsam: Sie alle müssen Dateien über den Webbrowser des Benutzers ins Internet hochladen. Die Datei -Upload -Funktion ist ein wichtiger Bestandteil vieler Websites und Webanwendungen, die täglich verwendet werden. In diesem Artikel werden Ihnen angezeigt, wie Sie mit PHP Datei -Upload -Support zu Ihrer Website hinzufügen.

Schlüsselpunkte

  • Support -Unterstützung in PHP hinzufügen. Erstellen Sie ein HTML -Formular für Benutzer und ein PHP -Skript für die Verarbeitung von Dateien, die auf dem Server hochgeladen wurden. Das <form></form> -Element muss die Post-Methode verwenden und die EngeTePe-Eigenschaft auf Mehrfach-/Formdaten einstellen.
  • Die hochgeladenen Dateien werden zuerst in einem temporären Verzeichnis gespeichert. Das für die Bearbeitung von Formulareinführungen verantwortliche PHP -Skript bestätigt die Datei und verarbeitet sie, wobei sie normalerweise von einem temporären Ort zu einem dauerhafteren Ort verschoben werden.
  • Informationen zu Datei-Uploads werden über mehrdimensionale Arrays $_FILES bereitgestellt. Die Funktion move_uploaded_file() verschiebt die hochgeladene Datei von einem temporären Speicherort an einen dauerhaften Speicherort und führt zusätzliche Schecks durch, um sicherzustellen, dass die Datei tatsächlich über die HTTP -Postanforderung hochgeladen wird.
  • Es besteht ein Sicherheitsrisiko für Datei -Uploads. Um diese Risiken zu mildern, können Sie die Art der hochgeladenen Dateien überprüfen, strenge Einschränkungen für den Hochladen des Verkehrs auferlegen und Viren scannen. Es ist auch wichtig, einen sicheren Dateinamen zu gewährleisten, indem Sie alle Zeichen ersetzen, die keine Buchstaben, Zahlen oder eine sehr begrenzte Anzahl von Interpunktionsmarken durch einen Unterstrich sind.

Voraussetzungen

Das Upload der Verarbeitungsdatei ist nicht schwierig, aber es gibt einige kleine Details, die korrekt sein müssen, andernfalls schlägt der Upload fehl. Zunächst müssen Sie sicherstellen, dass PHP so konfiguriert ist, dass Uploads zulässig sind. Überprüfen Sie Ihre Php.ini -Datei und überprüfen Sie, ob die Anweisung File_Uploads auf ein festgelegt ist.

<code>file_uploads = On</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hochgeladene Dateien werden zuerst in einem temporären Verzeichnis gespeichert (keine Sorge ... Ihr PHP -Skript kann dann Dateien anschließend an einen dauerhafteren Ort verschieben). Standardmäßig ist der anfängliche Speicherort das Standardverzeichnis des Systems. Sie können verschiedene Verzeichnisse mithilfe der Anweisung upload_tmp_dir in php.ini angeben. In jedem Fall sollten Sie überprüfen, ob der PHP -Prozess über die entsprechenden Berechtigungen verfügt, um in das von Ihnen verwendete Verzeichnis zu schreiben.

<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Nachdem bestätigt wurde, dass die Konfiguration es dem Server ermöglicht, hochgeladene Dateien zu akzeptieren, können Sie sich auf HTML -Details konzentrieren. Wie die meisten anderen serverseitigen Interaktionen von HTML verwendet das Hochladen von Dateien Formulare. Es ist sehr wichtig, dass Ihr <form></form> -Element die Post-Methode verwenden und die EngeTePe-Eigenschaft auf Multipart/Form-Data einstellen muss.

Nach dem Login kopieren
Nach dem Login kopieren

Schreiben eines Upload -Prozess -Skripts

Gemäß Ihrer eigenen Erfahrung und den gerade genannten Anforderungen haben Sie möglicherweise den Prozess des Datei -Hochladens erraten.

  • Besucher sehen HTML -Seiten an, die Formulare enthalten, die speziell zur Unterstützung von Datei -Uploads verwendet werden.
  • Der Besucher liefert die Datei, die er hochladen möchte, und reicht das Formular ein.
  • Der Browser codiert die Datei und sendet sie als Teil einer an den Server ausgegebenen Postanforderung.
  • PHP empfängt Formulareinreichungen, dekodiert die Datei und speichert sie an einem temporären Ort auf dem Server.
  • Verantwortlich für die Bearbeitung der PHP -Skript -Validierungsdatei für die Einreichung von Formular und die Verarbeitung von dieser irgendwie, wobei sie normalerweise von einem temporären Ort zu einem dauerhafteren Ort verschoben werden.

Support für Dateien Upload muss ein HTML -Formular erstellen, das dem Benutzer und einem PHP -Skript angezeigt werden soll, um Dateien auf dem Server hochgeladen zu behandeln.

html

HTML -Formular bietet die Schnittstelle für den Upload des Datei zum Dateien. Denken Sie daran, dass das Methodenattribut des <input> -Elements auf post gesetzt werden muss und das EngeTePe-Attribut auf Multipart/Form-Data gesetzt werden muss. Ein Datei <input> Element enthält ein Feld, das die zu hochgeladene Datei angibt. Wie jedes andere Formularelement ist es wichtig, das Namensattribut anzugeben, damit Sie es in einem PHP -Skript verweisen können, das das Formular verarbeitet. Hier ist ein Beispiel für das Markieren für ein grundlegendes Datei -Upload -Formular:

<code>file_uploads = On</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Es ist erwähnenswert, dass verschiedene Browser Dateifelder auf unterschiedliche Weise rendern. Dh, Firefox und Opera zeigen es als Textfelder mit markierten Schaltflächen an oder wählen Sie neben ihnen. Safari rendert es als eine Schaltfläche, die nur als Datei auswählen markiert wird. Dies ist normalerweise kein Problem, da der Benutzer daran gewöhnt ist, wie das Feld im Browser seiner Wahl gerendert wird und weiß, wie man es benutzt. Manchmal begegnen Sie jedoch Kunden oder Designern, die darauf bestehen, es auf irgendeine Weise zu präsentieren. Aus den vom Browser auferlegten Sicherheitsgründen ist die Anzahl der CSS und JavaScript, die auf Dateifelder angewendet werden können, sehr begrenzt. Gestaltete Dateifelder können schwierig sein. Wenn Ihnen das Erscheinungsbild wichtig ist, schlage ich vor, dass Sie Peter-Paul Kochs gestyltes Eingabe-Typ = "Datei" ansehen.

php

Informationen zu Datei-Uploads werden über mehrdimensionale Arrays $_FILES bereitgestellt. Dieses Array wird unter dem Namen in den Dateifeldern im HTML -Formular indiziert, genau wie $_GET und $_POST indiziert mit dem Namen. Dann enthält das Array jeder Datei den folgenden Index:

  • $_FILES["myFile"]["name"] speichert den Original -Dateinamen im Client.
  • $_FILES["myFile"]["type"] Der MIME -Typ, der die Datei speichert.
  • $_FILES["myFile"]["size"] Größe der Datei in Bytes.
  • $_FILES["myFile"]["tmp_name"] Der Name der temporären Datei wird gespeichert.
  • $_FILES["myFile"]["error"] Speichern Sie alle Fehlercodes, die während der Übertragung generiert wurden.
Die Funktion

move_uploaded_file() verschiebt die hochgeladene Datei von einem temporären Speicherort an einen dauerhaften Ort. Sie sollten immer Funktionen wie move_uploaded_file() anstelle von copy() und rename() für diesen Zweck verwenden, da sie zusätzliche Überprüfungen durchführt, um sicherzustellen, dass die Datei tatsächlich über die HTTP -Postanforderung hochgeladen wird. Wenn Sie vorhaben, Dateien mit dem vom Benutzer bereitgestellten Original -Dateinamen zu speichern, können Sie sicherstellen, dass dies sicher ist. Der Dateiname sollte keine Zeichen enthalten, die sich auf den Zielpfad auswirken können, z. B. Schrägstriche. Der Name sollte auch nicht dazu führen, dass die Datei vorhandene Dateien mit demselben Namen überschreibt (es sei denn, Ihr Anwendungsdesign tut dies). Ich sorge für einen sicheren Dateinamen, indem ich jede Nichtlager-, Nummer oder eine sehr begrenzte Reihe von Interpunktionszeichen durch einen Unterstrich ersetze und dann inkrementierte Zahlen anhängen, wenn die Datei mit demselben Namen bereits vorhanden ist. Hier ist ein Beispiel für das Empfangen und Verarbeiten von PHP -Datei -Uploads:

<code>file_uploads = On</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Code stellt zuerst sicher, dass beim Hochladen der Datei keine Fehler auftreten. Anschließend ermittelt es den sicheren Dateinamen (wie ich gerade erwähnt habe) und verwendet move_uploaded_file(), um die Datei in das endgültige Verzeichnis zu verschieben. Rufen Sie schließlich chmod() auf, um sicherzustellen, dass in der neuen Datei angemessener Zugriff festgelegt wird.

Sicherheitsvorkehrungen

Die meisten von uns lassen einen totalen Stranger zufälligen Dateien auf unserem PC nicht speichern. Wenn Sie jedoch zulassen, dass Dateien in unserer App hochgeladen werden, tun Sie dies tatsächlich. Möglicherweise planen Sie, dass der Benutzer seine eigenen Fotos als Profilseite hochladen. Was ist jedoch, wenn er versucht, eine speziell hergestellte, virushaltige ausführbare Datei hochzuladen? Ich möchte einige Schritte ausführen, die Sie unternehmen können, um die inhärenten Sicherheitsrisiken für das Erlaubt von Datei -Uploads zu minimieren. Einer der Schritte besteht darin, zu überprüfen, ob die hochgeladene Datei korrekt ist. Abhängig vom Wert von $_FILES["myFile"]["type"] oder der Erweiterung des Dateinamens ist nicht sicher, da beide anfällig für Fälschungen sind. Verwenden Sie stattdessen eine Funktion wie exif_imagetype(), um den Inhalt der Datei zu überprüfen und festzustellen, ob es sich tatsächlich um GIF, JPEG oder mehrere andere unterstützte Bildformate handelt. Wenn exif_imagetype() nicht verfügbar ist (für die Funktion muss die EXIF ​​-Erweiterung aktiviert werden), kann getimagesize() verwendet werden. getimagesize() Das zurückgegebene Array enthält den Bildtyp (falls erkannt).

<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Für Nicht-Image-Dateien können Sie exec() das UNIX-Datei-Dienstprogramm verwenden. Die Datei bestimmt den Typ der Datei, indem sie nach bekannten binären Signaturen am erwarteten Ort suchen.

<code>file_uploads = On</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Ein weiterer Schritt, den Sie unternehmen können, besteht darin, die Gesamtgröße der Postanforderung und die Anzahl der Dateien, die hochgeladen werden können, eine strikte Begrenzung aufzuerlegen. Geben Sie dazu die geeigneten Werte für die Direktiven upload_max_size, post_max_size und max_file_uploads in php.ini an. Die Anweisung upload_max_size gibt die maximale Größe für Datei -Uploads an. Zusätzlich zur hochgeladenen Größe können Sie auch die Anweisung pOST_MAX_SIZE verwenden, um die Größe der gesamten Postanforderung zu begrenzen. MAX_FILE_UPLOADS ist eine neuere Anweisung (in Version 5.2.12 hinzugefügt), die die Anzahl der Dateien -Uploads einschränkt. Diese drei Anweisungen schützen Ihre Website vor Angriffen, die versuchen, ihre Verfügbarkeit zu untergraben, indem sie viel Netzwerkverkehr oder Systemlast verursachen.

<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Der dritte Schritt, den Sie unternehmen können, besteht darin, den Virus -Scanner zum Scannen der hochgeladenen Dateien zu verwenden. Dies ist in der heutigen Ära von weit verbreiteten Viren und Malware von entscheidender Bedeutung, insbesondere wenn Ihre Website anderen Personen später hochgeladene Dateien herunterladen kann, z. B. Anhänge in webbasierten E-Mail-Kunden oder (legal) Dateifreigabe-Websites. Es gibt eine PHP-Erweiterung, die auf Clamav zugreifen kann. Natürlich können Sie das Befehlszeilendienstprogramm von Clamav wie ich für die Datei demonstriert haben.

Nach dem Login kopieren
Nach dem Login kopieren

Zusammenfassung

Sie haben gelernt, wie einfach es ist, Ihre Website oder webbasierte Anwendung zu verwenden, um Dateien-Uploads zu unterstützen. Damit das Hochladen als erfolgreich ist, muss das HTML-Formular über eine mehrteilige/form-data-kodierte Postanforderung übermittelt werden, und PHP muss die Übertragung über die Anweisung File_Uploads ermöglichen. Nachdem die Datei übertragen wurde, verschiebt das Skript, das für die Behandlung des Uploads verantwortlich ist, die Datei aus dem temporären Verzeichnis an den gewünschten Speicherort unter Verwendung der im $_FILES -Array gefundenen Informationen. Ich teile auch einige zusätzliche Vorsichtsmaßnahmen, die Sie treffen können, um sich und Ihre Benutzer vor einigen der Risiken zu schützen, die mit dem Erlaubt von Datei -Uploads verbunden sind. Sie sehen, wie Sie sicherstellen, dass Dateinamen sicher sind, Dateitypen überprüfen, strenge Einschränkungen für den Hochladen des Verkehrs auferlegen und Viren scannen.

(solcher Inhalt wie den FAQ -Abschnitt kann nach Bedarf hinzugefügt werden)

Das obige ist der detaillierte Inhalt vonphpmaster | Hochladen von Dateien mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage