126 Shares 5148 views

PHP: Datei-Upload auf den Server

Das Herunterladen von Dateien über PHP – einen sehr interessanten Falles, zu denen muss sehr sorgfältig angegangen werden. Im Internet finden Sie zahlreiche Beispiele für die Umsetzung von Datei-Upload, aber nicht alle von ihnen sind gut und erfüllen Sicherheitsbestimmungen zu finden.


Solche Dinge müssen zu einem Abschluss bringen, selbst wenn es eine lange Zeit in Anspruch nimmt. Wenn Sie eine Lücke im Code lassen, dann können Sie Ihre gesamten Server beeinträchtigt werden.

Sicherheit

Mit PHP – Datei hochladen auf den Server nicht ganz einfach durchgeführt wird. Der Code ist sehr kurz und einfach. Nur ein paar Zeilen. Allerdings ist diese Methode gefährlich. Viel Zeit und Codezeilen in Sicherheit.

Die Gefahr besteht darin, dass, wenn Sie Inspektionen nicht tun, jeder Angreifer ihre Skripte auf dem Server hochladen können. In diesem Fall wird es vollen Zugriff hat. Er kann tun, was er will:

  • Löschen Sie die Datenbank;
  • Löschen von Dateien Websites;
  • Ändern von Dateien Websites;
  • Fügen Sie Ihre Anzeige auf Ihre Website;
  • Herunterladen Viren;
  • lenkt alle Benutzer auf ihren Websites;
  • und viele andere Dinge, die kommen Angreifer kümmern.

Sie sollten immer prüfen, dass eine Datei für den Benutzer zum Download versucht. Wenn Sie Bilder hochladen nur zum Beispiel, ist es notwendig, zu überprüfen, ob die Datei genau ein Bild ist. Andernfalls werden Sie nichts herunterladen.

Wie genau Überprüfung zu implementieren, wird es gezeigt, mit der direkten Prüfung Skript werden, um Dateien zu.

Erstellen einer PHP-Form

Datei-Upload-Formular ist sehr einfach. Fehlende die Schaltfläche Durchsuchen und Upload-Tasten.

Beschreibt das Erstellen Formulare nicht, weil es einfach ist. Weitere Anweisungen gehen davon aus, dass Sie bereits die grundlegenden Konzepte von HTML haben (sonst würden Sie nicht für Informationen über das Herunterladen auf PHP suchen).

Aber beachten Sie, dass die Daten in der Form müssen Sie das enctype Attribut hinzufügen.

Andernfalls werden die Daten auf Datei-Handler nicht übertragen werden.

Wie soll es funktionieren?

Wenn Sie auf die Schaltfläche Durchsuchen klicken, sollten Sie ein Feld sehen, wo eine Datei wählen gefragt.

Danach wird es erforderlich sein, einen Weg zu erhalten, wo sich die Datei befindet.

Wenn der Pfad nicht erscheint, führen Sie erneut die Aktion.

Nach einem Klick auf den Download-Datei-Handler keine Auskunft geben.

Zum Beispiel können Sie die Zeile schreiben, die besagen, dass die Datei „so und so“ die Bezeichnung für die „so und so“ Ordner erfolgreich hochgeladen wurde. Natürlich wird der Dateiname immer anders angegeben.

Typischerweise wird diese Information an Debug-Code verwendet. Somit ist es möglich, zu überprüfen, ob die Daten übertragen werden und schreibt im gewünschten Verzeichnis auftreten. Das heißt, auch der Dateiname wird nicht angezeigt. Da diese zusätzlichen Informationen, die der Benutzer nicht braucht.

Es macht Sinn, Ausgabe den Namen nur, wenn der Benutzer mehrere Dateien herunterlädt. Dies ist der Fall, ein wenig weiter in Betracht ziehen. Lassen Sie uns nicht vorgreifen.

Einstellung

In PHP Datei-Upload auf den Server erfordert bestimmte Einstellungen, die in der php.ini-Datei durchgeführt werden sollten. Diese Datei enthält eine Menge von Einstellungen. Sie alles, was wir nicht brauchen. Wir interessieren uns für drei Linien: file_uploads, upload_tmp_dir und upload_max_filesize.

Bitte beachten Sie, dass diese Einstellungen alle Ihre Websites auf dem Server auswirken, nicht nur irgendeine. Daher die maximale Größe basiert auf der Tatsache zu setzen, die die Benutzer laden müssen. Es ist nicht eingestellt zu groß empfohlen.

Nachdem Sie die Werte dieser Parameter ändern, müssen Sie den Server neu zu starten. Andernfalls werden die Einstellungen nicht wirksam, da sie zum Zeitpunkt der Serverlast zu lesen.

Sie können dies an den Server durch Verbinden über SSH in der Konsole tun. Geben Sie einfach den Befehl service httpd restart, und dann werden die Einstellungen wirksam werden.

Eine andere Methode – ein Neustart durch ISP-Panel oder durch Abrechnungs Panel-Anbieter.

Array-Datei

In PHP Datei-Upload wird durch den Array $ _FILES getan. Es enthält alle Informationen über die Dateien, die wir herunterladen.

Um zu sehen, welche Informationen in der Matrix enthalten ist, genug, um in den Datei-Handler zu schreiben folgen.

Wählen Sie eine beliebige Datei und klicken Sie auf „Upload“. Auf der Handler Seite werden die Informationen angezeigt, die in $ _FILES gespeichert ist. Die Variable wird vollständig mit Großbuchstaben geschrieben. PHP – ein sprachempfindlich.

Wie Sie sehen können, hat in diesem Array viele Felder. Alle von ihnen sind uns wichtig. Das erste Feld enthält den Dateinamen in der Form, in der es auf Ihrem Computer verwendet wird.

Die Art Spalte angegebenen Dateityp. Tmp_name Feld entspricht den Namen der temporären Datei. Nach dem Ende des Skripts wird gelöscht.

Das Fehlerfeld enthält einen Fehlercode. Das war ein wenig weiter. Größe – die Größe in Bytes.

Fehler

Durchgeführt durch den PHP-Datei-Upload wird immer durch einen Fehlercode begleitet. Eine Fehlermeldung wird in dem „Fehler“ eingegeben. Der Screenshot Fehler ist gleich Null.

Betrachten Sie den Wert aller Fehler:

Es wurde oben über den Parameter sagt, die in der üblichen HTML angegeben werden können.

Hier ist ein Beispielformular zum Herunterladen der Datei, die eine Grenze der Menge der hochgeladenen Datei angibt.

PHP: Datei-Upload-Skript

Da alle in der Praxis durchgeführt? In PHP tritt Datei-Upload-Kopierbefehl. Wenn Sie an der Frage interessiert sind, wie eine Datei herunterzuladen, ist die Antwort einfach Kopier-, die zwei Parameter verwendet – die Quelldatei und die Zieldatei.

Aber, wie oben erwähnt, kann es aus Sicherheitsgründen nicht begrenzt werden. Zum Beispiel prüfen, welche Art von Datei, die wir versenden, können Sie den Feldtyp in dem Array $ _FILES verwenden können. Lassen Sie uns zunächst mit Inspektion beschäftigen, und dann auf die vollständige Skript weitergehen

Angenommen, Sie Benutzer zu ermöglichen, wollen ein Foto mit einer Auflösung von nur GIF, JPEG oder PNG hochladen. Geben Sie es so sein kann.

if ($ _ FILES [ 'file_upload'] [ 'type']! = "image / gif") {
"Gif-Dateien Download nur Sorry, wir unterstützen" Echo;
Ausgang;
}

Wenn Sie alle drei Arten versenden möchten, einfach eine zusätzliche Bedingung auf die andere Art von Bild hinzufügen.

Das Kopieren erfolgt wie folgt aus: Kopie (Bild 1, Bild 2).

In unserem Fall, wenn die Arbeit vom PC auf den Server heruntergeladen wird, können Sie dies tun,

Kopie ($ _ FILES [ 'file_upload'] [ "tmp_name"], "1.jpg")

Das heißt, wird die Datei mit dem Namen 1.jpg kopiert werden. Das ist nicht ganz korrekt. In diesem Fall ist es nur ein Beispiel. Der Dateiname ist immer notwendig, anders zu spezifizieren, und die Erweiterung angeben, abhängig von der Datei.

Bestimmen Sie die Erweiterung kann verschiedene Arten sein. Es hängt alles von dem Entwickler von Belesenheit. Einer der schnellsten Wege, um (eine Differenz von Zehntelsekunden) bestimmt die Verlängerung – das ist der nächste Code.

$ Path_info = pathinfo ($ _ FILES [ 'photo1'] [ "name"]);

$ Ext = $ path_info [ 'Erweiterung'];

Die Variable $ die ext werden wir die gewünschte Erweiterung speichern. Ein Dateiname kann nach dem Zufallsprinzip mit md5 eingestellt wird. Wenn Sie viele Dateien herunterladen möchten, ist es besser, sie Ordner anders zu versenden. So wird es bequemer sein. Insbesondere wollen, wenn Sie reinigen.

zum Herunterladen wird der Code wie folgt aussehen.

/// Mit Foto

if ($ _FILES [ 'photo1'] [ 'tmp_name'] == null)

{

echo ( „

Unbekannte Datei.

Zurück …

„);

Ausgang;

}

///. Sagen Sie bitte für jedes Projekt auf dem Server erlaubt, große Dateien zu laden (Video), aber es gibt nur Bilder, und die Benutzer müssen begrenzen

if (($ _FILES [ "photo1"] [ "Größe"]> 1024 * 1024 * 2)

{

?>

die maximal zulässige Größe von 2 MB

Zurück …

<?

Ausgang;

}

// Ordner erstellen

// einen Ordner des aktuellen Monats erstellen

if (! file_exists ( "img /". date ( "M")))

{

Mkdir ( "img /" Datum ( "M").);

}

// einen Ordner des aktuellen Tages erstellen

if (! file_exists ( "img /". date ( "M"). "/". date ( "d")))

{

Mkdir ( "img /" Datum ( "M") "/" Datum ( "d"), …);

}

/// Dateierweiterung

$ Path_info = pathinfo ($ _ FILES [ 'photo1'] [ "name"]);

$ Ext = $ path_info [ 'Erweiterung'];

/// Dateinamen erzeugen,

$ Id = md5 (date ( "JMT"));

if (Kopie ($ _ FILES [ 'photo1'] [ "tmp_name"], "img /". date ( "M"). "/". date ( "d"). "/". $ id. $ ext) )

{

echo ( "erfolgreich Datei hochgeladen");

}

/// weitere Maßnahmen (Eintrag in der Datenbank, und so weiter. N.)

}

mehrere Dateien

Das Hochladen von mehreren Dateien (PHP) erfolgt durch zusätzliche Felder in dem Formular ein.

Diese Methode ist nicht sehr gut, da es die Anzahl der Dateien zum Download begrenzt. Darüber hinaus ist es schlechte Form in der Programmierung berücksichtigt. Versuchen Sie, alles dynamisch zu tun.

Die ideale Wahl – es ist eine Auswahl aus einer großen Anzahl von Dateien auf einmal durch Drücken einer einzigen Taste.

Um dies zu tun, erstellen Sie eine Form wie dieser Code.

Beachten Sie, dass die mehrfache Zugabe des Wortes, und der Name wird als Array gegeben []. In diesem Fall wird $ _FILES Array etwas unterschiedlich sein. Sie werden eine Reihe des Arrays erhalten.

Um zu testen, kann wieder die var_dump verwenden ($ _ FILES);

Alle Ihre Dateien werden in dem Array wie folgt gesetzt werden:

  1. $ _FILES [ "file1"] [ "name"] [0]
  2. $ _FILES [ "file1"] [ "name"] [1]
  3. Usw.

In Klammern ist die Dateinummer in dem Feld geschrieben. Zählen von Null. Wir behandeln sie auf die gleiche Weise, nur den Zyklus stellen und durch den oben beschriebenen Code am Ende des Index in Kontakt Hinzufügen [$ i].

$ I = 0;

while ($ _FILES [ "file1"] [ "name"] [$ i] '')

{

/// fügen Sie den obigen Code

}

So werden Sie durch einen PHP-Datei-Upload auf den Server in einem Zyklus ohne unnötige Wiederholungen des Codes geschehen müssen, da in der Regel der Fall ist, wenn Sie die Version mit einer statischen Anzahl von Dateien (letztes Foto) verwenden.