In diesem Artikel erkläre ich die Grundlagen des Dateiuploads in PHP. Zuerst gehen wir die PHP-Konfigurationsoptionen durch, die für das erfolgreiche Hochladen von Dateien vorhanden sein müssen. Anschließend entwickeln wir ein reales Beispiel, wie eine Datei hochgeladen wird.
Es gibt einige PHP-Konfigurationseinstellungen, die Sie vorab auf erfolgreiche Dateiuploads überprüfen möchten. In diesem Abschnitt gehen wir auf jede Option ein, die für das Hochladen von PHP-Dateien wichtig ist. Diese Optionen können in der konfiguriert werden php.ini Datei.
Wenn Sie nicht sicher sind, wo Sie Ihr finden können php.ini Datei können Sie die php_ini_loaded_file ()
um es zu finden. Erstellen Sie einfach eine PHP-Datei mit der folgenden Zeile auf Ihrem Server und öffnen Sie sie über den Browser.
Hier ist ein Auszug aus einer Setup-Datei mit einigen nützlichen Standardeinstellungen.
; Gibt an, ob HTTP-Dateiuploads zulässig sind. file_uploads = Ein; Temporäres Verzeichnis für hochgeladene HTTP-Dateien. ; Verwendet die Systemeinstellung, wenn nicht festgelegt. ; upload_tmp_dir =; Maximal zulässige Größe für hochgeladene Dateien. upload_max_filesize = 16M; Maximale Anzahl von Dateien, die über eine einzelne Anforderung hochgeladen werden können max_file_uploads = 20; Maximale Größe der POST-Daten, die PHP akzeptiert. post_max_size = 20M max_input_time = 60 memory_limit = 128M max_execution_time = 30
file_uploads
Der Wert von file_uploads
Direktive sollte auf gesetzt sein Auf
um das Hochladen von Dateien zu ermöglichen. Der Standardwert dieser Anweisung lautet Auf
.
upload_max_filesize
Das upload_max_filesize
Direktive ermöglicht das Konfigurieren der maximalen Größe der hochgeladenen Datei. Standardmäßig ist es eingestellt 2M
(zwei Megabytes), und Sie können diese Einstellung mit der. überschreiben .htaccess Datei auch. Nach heutigen Maßstäben sind zwei Megabytes nicht sehr viel, daher müssen Sie dies möglicherweise erhöhen. Wenn du einen Fehler bekommst Datei überschreitet upload_max_filesize
Wenn Sie versuchen, eine Datei hochzuladen, müssen Sie diesen Wert erhöhen. Wenn Sie dies tun, achten Sie darauf, auch zu erhöhen post_max_size
(siehe unten).
upload_tmp_dir
Legt ein temporäres Verzeichnis fest, in dem hochgeladene Dateien gespeichert werden. In den meisten Fällen müssen Sie sich um diese Einstellung keine Gedanken machen. Wenn Sie es nicht festlegen, wird das temporäre Systemverzeichnis des Systems verwendet.
post_max_size
Das post_max_size
Direktive ermöglicht das Konfigurieren der maximalen Größe von POST-Daten. Da Dateien mit POST-Anforderungen hochgeladen werden, muss dieser Wert größer sein als der, den Sie für eingestellt haben upload_max_filesize
Richtlinie. Zum Beispiel, wenn Ihre upload_max_filesize
ist 16M
(16 Megabyte) möchten Sie vielleicht einstellen post_max_size
zu 20M
.
max_file_uploads
Hier können Sie die maximale Anzahl von Dateien festlegen, die gleichzeitig hochgeladen werden können. Der Standardwert ist 20
, eine vernünftige Menge.
max_input_time
Dies ist die maximale Anzahl von Sekunden, die ein Skript die Eingabedaten analysieren darf. Sie sollten einen angemessenen Wert festlegen, wenn Sie mit großen Dateiuploads arbeiten. 60
(60 Sekunden) ist für die meisten Apps ein guter Wert.
memory_limit
Das memory_limit
Direktive gibt an, wie viel Speicher ein Skript maximal beanspruchen kann. Wenn beim Hochladen großer Dateien Probleme auftreten, müssen Sie sicherstellen, dass der Wert dieser Anweisung größer ist als der Wert, den Sie für die post_max_size
Richtlinie. Der Standardwert ist 128M
(128 MB), es sei denn, Sie haben ein sehr großes Format post_max_size
und upload_max_filesize
, Sie müssen sich keine Sorgen machen.
max_execution_time
Dies ist die maximale Anzahl von Sekunden, die ein Skript ausgeführt werden 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 den Upload von Dateien in PHP zu demonstrieren.
Nachdem Sie die PHP-Einstellungen konfiguriert haben, können Sie die Funktionen zum Hochladen von PHP-Dateien ausprobieren.
Unser GitHub-Repo enthält einige Beispielcodes, die ich in diesem Artikel besprechen werde. Wenn Sie mitverfolgen möchten, laden Sie es von GitHub herunter.
Wir werden zwei PHP-Dateien erstellen: index.php und upload.php. Das index.php Datei enthält Code, der für das Anzeigen des Datei-Upload-Formulars verantwortlich ist. Auf der anderen Seite die upload.php Die Datei ist für das Hochladen einer Datei auf den Server verantwortlich.
Außerdem wird eine Datei in die hochgeladen hochgeladene Dateien Verzeichnis, so dass Sie sicherstellen müssen, dass dieser Ordner existiert und von der Webserver
Nutzer.
In diesem Abschnitt gehen wir durch die wichtigsten Teile von index.php Datei.
Werfen wir einen Blick auf die index.php Datei auf GitHub:
PHP-Datei hochladen % s', $ _SESSION [' message ']); nicht gesetzt ($ _ SESSION ['message']); ?>
Obwohl es wie ein typisches PHP-Formular aussieht, gibt es einen wichtigen Unterschied im Wert von enctype
Attribut des Etikett. Es muss auf gesetzt sein
Multipart / Formulardaten
da das Formular das Dateifeld enthält.
Das enctype
Das Attribut gibt den Typ der Codierung an, die 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 von nicht festlegen enctype
Attribut explizit. In diesem Fall werden Zeichen verschlüsselt, bevor sie an den Server gesendet werden. Wenn Sie das Dateifeld nicht in Ihrem Formular haben, sollten Sie diesen Wert für das Formular verwenden enctype
Attribut.Multipart / Formulardaten
: Wenn Sie das verwenden Multipart / Formulardaten
Wert für die enctype
Mit diesem Attribut können Sie Dateien mit der POST-Methode hochladen. Außerdem wird sichergestellt, dass die Zeichen beim Senden 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 Dateiuploads an und wird in einer Sitzungsvariablen von der festgelegt upload.php Skript. Im nächsten Abschnitt werden wir uns das genauer ansehen.
% s', $ _SESSION [' message ']); nicht gesetzt ($ _ SESSION ['message']); ?>
Das fasst das zusammen index.php Datei. Im nächsten Abschnitt erfahren Sie, wie Sie die hochgeladene Datei auf der Serverseite behandeln.
Im vorherigen Abschnitt haben wir das HTML-Formular erstellt, das auf der Clientseite angezeigt wird und das Hochladen einer Datei von Ihrem Computer ermöglicht. In diesem Abschnitt sehen Sie das serverseitige Gegenstück, mit dem Sie die hochgeladene Datei bearbeiten können.
Ziehen Sie den Code aus der upload.php Datei auf GitHub. Wir werden die wichtigen Teile dieser Datei durchgehen.
In dem upload.php Datei haben wir geprüft, ob es überhaupt eine gültige POST-Anfrage ist.
if (isset ($ _ POST ['uploadBtn']) && $ _POST ['uploadBtn'] == 'Upload') …
Wenn in PHP eine Datei hochgeladen wird, die $ _FILES
Die Superglobal-Variable wird mit allen Informationen zur hochgeladenen Datei gefüllt. Es wurde als Array initialisiert und kann die folgenden Informationen für den erfolgreichen Upload von Dateien enthalten.
tmp_name
: Der temporäre Pfad, in den die Datei hochgeladen wird, wird in dieser Variablen gespeichert.Name
: Der tatsächliche Name der Datei wird in dieser Variablen gespeichert.Größe
: Gibt die Größe der hochgeladenen Datei in Byte an.Art
: Enthält den Mime-Typ der hochgeladenen Datei.Error
: Wenn während des Dateiuploads ein Fehler auftritt, wird diese Variable mit der entsprechenden Fehlermeldung aufgefüllt. Im Falle eines erfolgreichen Datei-Uploads enthält es 0, die Sie mit Hilfe von vergleichen können UPLOAD_ERR_OK
Konstante.Nach der Validierung der POST-Anforderung überprüfen wir, ob der Upload der Datei erfolgreich war.
if (isset ($ _ FILES ['uploadedFile']) && $ _FILES ['uploadedFile'] ['error'] === UPLOAD_ERR_OK) …
Sie können das sehen $ _FILES
Variable ist ein mehrdimensionales Array, das erste Element ist der Name des Dateifelds, und das zweite Element enthält die Informationen über die hochgeladene Datei, wie wir oben erläutert haben.
Wenn der Dateiupload erfolgreich ist, initialisieren wir einige Variablen mit Informationen zu der hochgeladenen Datei.
// Details der hochgeladenen Datei abrufen $ fileTmpPath = $ _FILES ['uploadedFile'] ['tmp_name']; $ fileName = $ _FILES ['uploadedFile'] ['Name']; $ fileSize = $ _FILES ['uploadedFile'] ['size']; $ fileType = $ _FILES ['uploadedFile'] ['type']; $ fileNameCmps = explode (".", $ fileName); $ fileExtension = strtolower (end ($ fileNameCmps));
Im obigen Snippet haben wir auch die Erweiterung der hochgeladenen Datei herausgefunden und in der gespeichert $ fileExtension
Variable.
Da die hochgeladene Datei Leerzeichen und andere Sonderzeichen enthalten kann, ist es besser, den Dateinamen zu bereinigen. Genau das haben wir im folgenden Snippet getan.
$ newFileName = md5 (time (). $ fileName). '.' . $ fileExtension;
Es ist wichtig, dass Sie den Dateityp einschränken, der auf bestimmte Erweiterungen hochgeladen werden kann. Wir haben dies getan, indem wir die Erweiterung der hochgeladenen Datei mit einer Reihe von Erweiterungen geprüft haben, die wir hochladen möchten.
$ allowedfileExtensions = array ('jpg', 'gif', 'png', 'zip', 'txt', 'xls', 'doc'); if (in_array ($ fileExtension, $ allowedfileExtensions)) …
Zum Schluss verwenden wir die move_uploaded_file
Funktion zum Verschieben der hochgeladenen Datei an einen bestimmten Ort unserer Wahl.
// Verzeichnis, in das die hochgeladene Datei verschoben wird $ uploadFileDir = './uploaded_files/'; $ dest_path = $ uploadFileDir. $ newFileName; if (move_uploaded_file ($ fileTmpPath, $ dest_path)) $ message = 'Die Datei wurde erfolgreich hochgeladen.'; else $ message = 'Beim Verschieben der Datei in das Verzeichnis ist ein Fehler aufgetreten. Bitte stellen Sie sicher, dass das Upload-Verzeichnis vom Webserver beschreibbar ist. ';
Das move_uploaded_file
Funktion benötigt zwei Argumente. Das erste Argument ist der Dateiname der hochgeladenen Datei. Das zweite Argument ist der Zielpfad, in den Sie die Datei verschieben möchten.
Schließlich leiten wir den Benutzer auf die index.php Datei. Außerdem legen wir die entsprechende Nachricht in der Sitzungsvariablen fest, die den Benutzern nach der Umleitung in angezeigt wird index.php Datei.
Vergiss nicht, das zu erstellen hochgeladene Dateien Verzeichnis und machen es beschreibbar durch die Webserver Nutzer. Als nächstes fahren Sie mit der index.php Datei, die das Datei-Upload-Formular anzeigen sollte, das folgendermaßen aussieht:
Klicke auf das Durchsuche Schaltfläche, die ein Dialogfeld öffnet, 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 Taste.
Das sollte das Formular absenden, und wenn alles gut geht, sollten Sie die hochgeladene Datei im sehen hochgeladene Dateien Verzeichnis. Sie können auch versuchen, andere Dateien mit nicht zulässigen Erweiterungen hochzuladen, und prüfen, ob unser Skript solche Uploads verhindert.
Heute haben wir die Grundlagen des Dateiuploads in PHP diskutiert. In der ersten Hälfte des Artikels haben wir die verschiedenen Konfigurationsoptionen beschrieben, die für das Hochladen von Dateien vorhanden sein müssen. Dann haben wir uns ein reales Beispiel angesehen, das zeigt, wie das Hochladen von Dateien in PHP funktioniert.
Ich hoffe, Ihnen hat dieser Artikel gefallen und Sie können gerne Ihre Fragen und Vorschläge hier posten!