Heim Backend-Entwicklung PHP-Tutorial Praktische Tipps und Methoden zur Implementierung der Datei-Upload-Backend-Verarbeitung in PHP

Praktische Tipps und Methoden zur Implementierung der Datei-Upload-Backend-Verarbeitung in PHP

May 26, 2018 pm 04:40 PM
php 后端 处理

In diesem Artikel werden hauptsächlich relevante Informationen zu praktischen Fähigkeiten und Methoden der Back-End-Verarbeitung von PHP-Datei-Uploads vorgestellt. Hier finden Sie eine detaillierte Erklärung der Back-End-Verarbeitung und einen einfachen Beispielcode

Praktische Tipps und Methoden für die Back-End-Verarbeitung des PHP-Datei-Uploads

Zitat: Wie im vorherigen Artikel erwähnt, können Sie versteckte Methoden auf der Seite verwenden, um das Erscheinungsbild Ihrer Upload-Seite zu verbessern Schön. Aber das bringt der Leistung nichts, gibt es also nicht einige Verarbeitungstechniken in der Hintergrundverarbeitung? Zu den sogenannten Hintergrundkenntnissen gehören das schnellere Hochladen und das Hochladen größerer Dateien! In diesem Artikel geht es also darum, welche Fähigkeiten es in der Back-End-Verarbeitung gibt!

Geschäftsszenario 1 Wir wählen nur eine einzelne Datei zum Hochladen aus und es ist keine sofortige Überprüfung erforderlich. Dann gibt es möglicherweise überhaupt keine Optimierung, denn am Ende müssen Sie diese Datei nur noch in das Formular einfügen, sie zusammen senden und sie dann direkt verarbeiten!

Geschäftsszenario 2Es müssen mehrere Dateien hochgeladen werden und der interne Inhalt der Dateien muss von Zeit zu Zeit überprüft und auf der entsprechenden Seite angezeigt werden. In diesem Fall müssen wir die Datei sofort hochladen, nachdem der Benutzer sich zum Hochladen der Datei entschieden hat, da wir die Informationen in der Datei lesen müssen. Wenn wir sie am Ende übermitteln, müssen wir die Datei auch einmal übermitteln. Offensichtlich gibt es hier eine sich wiederholende Upload-Aufgabe, die die Zeit des Benutzers und die andere die Bandbreitenressourcen des Servers verbraucht. Die denkbare Methode zur Optimierung ist ebenfalls sehr einfach. Nach dem ersten Hochladen der Datei kann die Datei auf dem Server gespeichert werden und beim tatsächlichen Absenden des Formulars einfach die hochgeladene temporäre Datei gelesen werden. Ja, das ist unser Ansatz!

Geschäftsszenario drei , ähnlich wie Szenario zwei, erfordert das Hochladen mehrerer Dateien, es können jedoch mehrere Dateien separat hochgeladen werden. Das heißt, wir haben möglicherweise 10 Millionen zum ersten Mal, 10 Millionen zum zweiten Mal und insgesamt 10 Mal hochgeladen. Dann muss die einmalige Übermittlung auf der Serverseite die Upload-Größenbeschränkung überschritten haben, aber wenn ja Das Hochladen ist jedes Mal möglich und beim Absenden müssen wir nur eine kurze Textnachricht hochladen!

Die Idee ist in der Tat einfach und es scheint kein Problem zu sein. Vielleicht sind meine Fähigkeiten jedoch begrenzt und ich habe wirklich viel Zeit gebraucht, um damit umzugehen! Nachfolgend gebe ich einen Beispielcode als Referenz:

Datei-Upload-Technik (Vorhandensein einer einzelnen hochgeladenen Datei als temporäre Datei auf der Serverseite) Beispielcode:

1. Seite js-Verarbeitung

 //点击选择完成文件后,触发上传文件操作,将文件上传至服务器临时目录
  $('.upload-real-file').off().on('change', function(){
   if(!$(this).val()){
    return false;
   }
   var responseObjId = $(this).attr('response-id');
   var responseObj = $('#' + responseObjId);
   $('#Form').ajaxSubmit({
    url:'/aa/bb/uploadTmpApkTool',
    resetForm: false,
    dataType: 'json',
    beforeSubmit: function(option){
     window.loading = layer.load(2);
    },
    success: function(data, statusText){
     layer.close(window.loading);
     if(data.status == 1){
      responseObj.html(data.apkInfoHtml);
      var parentContainer = responseObj.parent().parent(),
       nameContainer = parentContainer.find('.file-name-container');
      nameContainer.html(data.apkName);
      nameContainer.attr('title', data.apkName);
      responseObj.find('.file-tmp').html(data.fileInfo); //将文件信息存放于隐藏域中,以便在提交时能找到 
      $(submitId).removeAttr('disabled');
     }else{
      layer.alert(data.info);
     }
    },
    error: function(data){
     layer.close(window.loading);
     layer.alert('未知错误,请稍后再试!');
    }
   });
   return false;//防止dialog 自动关闭
  });
Nach dem Login kopieren

2. Offensichtlich muss die Seite Dateiinformationen und Hintergrundverarbeitungscode (PHP) erhalten

rrree

3. Durch die Kombination der beiden Teile des Codes haben wir bereits die richtigen Informationen auf der Seite. Wir müssen das Formular nur am Ende absenden. Wenn Sie die Datei nicht an den Server senden möchten, verschieben Sie einfach die zuvor hochgeladene temporäre Datei, und schon sind Sie fertig!

  $apkConfig = $this->_getApkConfig();
  $params = $this->getFilteredParam('get');
  $subFile = $_FILES['apkToolFiles'];
  $apkName = $apkInfoHtml = "";
  if(empty($subFile))
  {
   $this->ajaxReturn(array('status' => -4, 'info' => '请选择要上传的文件'));
  }

  foreach ($subFile['name'] as $subKey => $subVal)
  {
   if ($subFile['name'][$subKey])
   {
    $fileData = $this->_getFileData($subFile, $subKey);
    $checkData = array(
     'maxSize' => $apkConfig['FILE_MAX_SIZE'],
     'savePath' => $apkConfig['TMP_CHILD_PATH'],
     'extArr' => array('apk'),
     'releaseName' => str_replace('.apk', '', $fileData['fileName']), //特有
    );
    $checkResult = $this->_checkFileData($fileData, $checkData);
    if ($checkResult['status'] != 1)
    {
     $this->ajaxReturn($checkResult);
    }
    //移动文件
    $filePath = $checkData['savePath'] . '/' . $fileData['fileName'] . '.tmp' . genRandStr(6);;
    $this->_moveUploadedFile($fileData['tmpName'], $filePath);
    $apkInfo = $this->_apkParser($filePath); //解析
    if($apkInfo['UMENG_CHANNEL'] != 'UMENG_CHANNEL_VALUE')
    {
     @unlink($filePath);        //删除无效文件
     $this->ajaxReturn(array('status' => 0, 'info' => "UMENG_CHANNEL的值要是 UMENG_CHANNEL_VALUE才行"));
    }
    $tmpFileArr['file_info'] = array(
     'name' => $subFile['name'][$subKey],
     'type' => $subFile['type'][$subKey],
     'tmp_name' => str_replace($apkConfig['TMP_CHILD_PATH'] . '/', '', $filePath),
     'error' => $subFile['error'][$subKey],
     'size' => $subFile['size'][$subKey],
    );    //转存该值,不再重复上传文件
   }
   else
   {
    $this->ajaxReturn(array('status' => 0, 'info' => "文件不能为空"));
   }
   foreach ($apkInfo as $key => $val)
   {
    $apkInfoHtml .= "{$key}:{$val} \r\n";
   }
   $apkName = $fileData['fileName'];
   $version = $apkInfo['versionName'];
  }
  $fileInfo = htmlspecialchars(json_encode($tmpFileArr['file_info']));
  $fileInfoHtml = "<input name=\"apkToolFileTmp[]\" value=&#39;{$fileInfo}&#39; type=\"hidden\"/>"; //一定要输出前使用htmlspecialchars, 否则不能正确显示页面值和获取至正确的文件信息

  $this->ajaxReturn(array(&#39;status&#39; => 1, &#39;info&#39; => "上传成功", &#39;version&#39; => $version, &#39;item&#39; => $item, &#39;apkName&#39; => $apkName, &#39;apkInfoHtml&#39; => $apkInfoHtml, &#39;fileInfo&#39; => $fileInfoHtml));
 }
Nach dem Login kopieren

4. Nachbereitung

Nach dem Hochladen der temporären Datei auf den Server gibt es keine Möglichkeit zu beurteilen, ob der Benutzer abbricht Wenn dies der Fall ist, sind die temporären Dateien immer auf dem Server vorhanden. Daher benötigen wir ein Skript, um das temporäre Verzeichnis regelmäßig zu bereinigen. Das ist natürlich ganz einfach. Sie müssen nur dieses Verzeichnis finden und die Uhrzeit vergleichen. Beispielsweise werden Dateien gelöscht, die älter als ein Tag sind. Achten Sie einfach darauf, die Häufigkeit der Reinigung zu kontrollieren!

5. Exkurs

Wo etwas schief gelaufen ist, wo Dateien gelöscht wurden und wo die Datenbank bereinigt wurde, müssen Sie gute Aufzeichnungen führen, wenn Sie das herausfinden Gründe, wo man um Hilfe schreien kann!

Das Hochladen von Dateien in das temporäre Verzeichnis des Servers scheint sehr einfach zu sein, aber es erfordert auch ein sorgfältiges Debuggen. Zumindest als ich diese kleine Funktion ausführte, hat es viel gekostet Mühe, es herauszufinden!

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


Verwandte Empfehlungen:

PHP-ImplementierungBackendDetaillierte Erläuterung der UnionPay-Zahlungs- und Rückerstattungsbeispiele

Parallelitätsimplementierung der Curl-Funktion in PHP reduziert die BackendZugriffszeit

Nachdem das PHP-Framework Java aufruft Terminal , lösen Sie das Problem, dass Parameter nicht übergeben werden können

Das obige ist der detaillierte Inhalt vonPraktische Tipps und Methoden zur Implementierung der Datei-Upload-Backend-Verarbeitung in 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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles