Heim  >  Artikel  >  Backend-Entwicklung  >  Zwei Möglichkeiten zum Implementieren des Datei-Uploads in PHP

Zwei Möglichkeiten zum Implementieren des Datei-Uploads in PHP

墨辰丷
墨辰丷Original
2018-06-04 10:25:112079Durchsuche

In diesem Artikel werden hauptsächlich zwei Möglichkeiten zum Implementieren des PHP-Datei-Uploads im Detail vorgestellt

Es gibt im Allgemeinen zwei Möglichkeiten, Dateien hochzuladen:

Ja Zwei Arten:
1. Standard-Eingabeformularmethode, normalerweise mit $_FILES zum Empfangen;
2. Übertragung im Base64-Verfahren, normalerweise AJAX-Upload.

Die erste
Standard-Eingabeformularmethode eignet sich zum Hochladen großer Dateien und unterstützt Stapel. Schlüsselsätze des HTML-Codes:

<form enctype="multipart/form-data" method="post" action="upload.php"">
  <input type="file" name="id_pic[]" accept="image/*" class="form-control" multiple />
  <input type="submit" value="上传 " />
</form>

Verschiedene Namen:

<form enctype="multipart/form-data" method="post" action="upload.php"">
  <input type="file" name="id_pic_1" accept="image/*" class="form-control" />
  <input type="file" name="id_pic_2" accept="image/*" class="form-control" />
  <input type="submit" value="上传 " />
</form>

Darunter: enctype="multipart/form-data" ist für das Hochladen von Dateien unerlässlich. Darüber hinaus legt type="file" den Eingabetyp fest und Accept="image/*" gibt die Priorität beim Hochladen von Bildern an (MIME-Referenzhandbuch). Multiple unterstützt die gleichzeitige Auswahl mehrerer Dateien, und pic[] empfängt mehrere Dateien in Form eines Arrays. Das mobile Endgerät kann auch den Parameter „capture="camera" hinzufügen, um die Kamera zum Aufnehmen und Hochladen von Bildern auszuwählen.

Backend-Verarbeitung:
Hochgeladene Dateien über $_FILES abrufen.

$files = $_FILES;
Bei der Übertragung mehrerer Dateien ist das Format des zurückgegebenen $_FILES-Arrays unterschiedlich, wenn die Namen unterschiedlich sind.

Bei gleichen Namen:

array(1) {
 ["id_pic"] => array(5) {
  ["name"] => array(2) {
   [0] => string(5) "1.jpg"
   [1] => string(5) "2.jpg"
  }
  ["type"] => array(2) {
   [0] => string(10) "image/jpeg"
   [1] => string(10) "image/jpeg"
  }
  ["tmp_name"] => array(2) {
   [0] => string(27) "C:\Windows\Temp\php7A7E.tmp"
   [1] => string(27) "C:\Windows\Temp\php7A7F.tmp"
  }
  ["error"] => array(2) {
   [0] => int(0)
   [1] => int(0)
  }
  ["size"] => array(2) {
   [0] => int(77357)
   [1] => int(56720)
  }
 }
}

Bei unterschiedlichen Namen:

   array(2) {
 ["id_pic_1"] => array(5) {
  ["name"] => string(5) "1.jpg"
  ["type"] => string(10) "image/jpeg"
  ["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEE.tmp"
  ["error"] => int(0)
  ["size"] => int(77357)
 }
 ["id_pic_2"] => array(5) {
  ["name"] => string(5) "2.jpg"
  ["type"] => string(10) "image/jpeg"
  ["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEF.tmp"
  ["error"] => int(0)
  ["size"] => int(56720)
 }
}

In Paar $ Wenn _FILES eine foreach-Durchquerung durchführt, ist das vorherige Ausgabeformat nicht sehr praktisch. Letzterer kann direkt befahren werden. Wir können eine Methode für die einheitliche Konvertierung schreiben:

function dealFiles($files) {
    $fileArray = array();
    $n     = 0;
    foreach ($files as $key=>$file){
      if(is_array($file[&#39;name&#39;])) {
        $keys    =  array_keys($file);
        $count   =  count($file[&#39;name&#39;]);
        for ($i=0; $i<$count; $i++) {
          $fileArray[$n][&#39;key&#39;] = $key;
          foreach ($keys as $_key){
            $fileArray[$n][$_key] = $file[$_key][$i];
          }
          $n++;
        }
      }else{
        $fileArray = $files;
        break;
      }
    }
    return $fileArray;
 }

Okay, wir haben darüber gesprochen, wie das Backend das empfangene $_FILES-Array verarbeitet und es in ein einheitliches Format konvertiert. Die nächsten Aufgaben sind hauptsächlich:
Überprüfen Sie, ob die hochgeladene Datei die Größe überschreitet.
3.
4. Dateiumbenennung;

Eine sehr wichtige Funktion wird im Upload-Prozess verwendet: move_uploaded_file(filename, $destination), um Dateiverschiebungsvorgänge durchzuführen. Verschieben Sie $_FILES['id_pic']['tmp_name'] in den neuen Pfad. Natürlich können Sie vor dem Verschieben mit is_uploaded_file($_FILES['id_pic']['tmp_name']) feststellen, ob die Datei normal hochgeladen wird.

Mehrere Datei-Uploads verwenden move_uploaded_file() mehrmals in einer Schleife, um den Verschiebungsvorgang auszuführen.

Beim zweiten Typ geht es hauptsächlich um das Hochladen von Bildern.
Verwenden Sie das Änderungsereignis der Eingabe, um das Bild mit Canvas zu verarbeiten (z. B. Komprimierung) und senden Sie dann den Dateistream über Ajax an das Backend.

Das Grundprinzip besteht darin, das Bild über die Leinwand zu rendern und es dann über die toDataURL-Methode zu komprimieren und in einer Base64-Zeichenfolge zu speichern (kann in ein Bild im JPG-Format kompiliert werden).

Back-End-Verarbeitung:
Das Back-End empfängt schließlich die vom Front-End gesendete Base64-Zeichenfolge und verarbeitet die Zeichenfolge dann zu einer Bild. Bitte verwenden Sie insbesondere das Schlüsselwort base64, um die Bildentwicklungssprache für Google|Baidu zu verwenden. Das vom Front-End generierte Ergebnis enthält eine base64Len, die der Länge der Zeichenfolge entspricht, und das Back-End sollte prüfen, ob die Übermittlung abgeschlossen ist.

//php示例:
$img = base64_decode($_POST[&#39;img&#39;]);
$img = imagecreatefromstring($img);

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

phpSo stellen Sie eine Verbindung zur Oracle-Datenbank her und einfache Analyse

PHP Paket MSSql-Operationsklasse und vollständige Beispielanalyse

phpKernschritte und kurze Analyse der Verbindung zur Oracle-Datenbank

Das obige ist der detaillierte Inhalt vonZwei Möglichkeiten zum Implementieren des Datei-Uploads in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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