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

墨辰丷
Freigeben: 2023-03-28 09:02:02
Original
1862 Leute haben es durchsucht

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!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage