2016-11-23 5 views
1

Es tut mir leid, wenn dies gefragt wurde Ich kann nicht die richtigen Schlüsselwörter in Google suchen. Also entschied ich mich hier in SO zu fragen.quing mehrere Datei hochladen in PHP

gerade jetzt, ich habe eine Upload-Funktion, die in Laravel gebaut ist, wo es auf 20 Bilder gleichzeitig hochladen kann, aber Client möchte 50 Bilder auf einmal sein, so denke ich, dass ich ' t Bearbeiten Sie php.ini immer dann, wenn der Client die maximalen Uploads gleichzeitig erhöhen möchte, da dies den Server beschädigen könnte.

ist es in php möglich, in der Warteschlange wie 10 Bilder für diese zweite nächste Sekunde hochzuladen, sind 10 Bilder wieder, bis der Upload alle erfolgt ist, damit der Server nicht bricht.

foreach ($request->file('image') as $key => $file) 
     { 
      $filename = md5(time() . uniqid()) . '.' . $file->getClientOriginalExtension(); 

      $imagesize = getimagesize($file); 

      if(($imagesize[0] == 533 && $imagesize[1] == 800) == false && 
       ($imagesize[0] == 800 && $imagesize[1] == 533) == false 
      ) { 
       $error++; 
       continue; 
      } 

      $file->move('uploads', $filename); 

      $data['image'] = url('uploads/' . $filename); 

      $order_id = 1; 

      $count = PropertyImages::where('property_id', $id)->count(); 

      if($count > 23) 
      { 
       return response()->json(['success' => false, 'msg' => 'Images must not exceed 24']); 
      } 

      $image = PropertyImages::where('property_id', $id)->orderBy('order_id', 'DESC')->first(); 

      if($image) 
      { 
       $order_id = $image->order_id + 1; 
      } 

      $item = PropertyImages::create([ 
       'property_id' => $id, 
       'filename' => $filename, 
       'order_id' => $order_id 
      ]); 

      $items[$key]['id'] = $item->id; 
      $items[$key]['filename'] = url('uploads/' . $item->filename); 

     } 
+0

Wenn ich es richtig mache, ja, ich wette, Sie können eine Zählervariable (zB '$ count = 1;') vor der 'foreach' Schleife setzen und' if ($ count% 10 == 0) {sleep (1); } $ count ++; 'kurz vor dem Ende der 'foreach'-Schleife. Dadurch wird der Prozess nach jedem Satz von 10 Uploads eine Sekunde lang gestoppt und dann die Schleife wiederholt. Aber ich bin mir nicht sicher, ob dies das Limit auslöst. – Zeke

Antwort

0

Ich bin nicht sicher, welche Setup Sie für das Hochladen von Bildern verwenden, so nehme ich an, dass Sie ein einfaches einfaches Formular mit 20 Dateieingabefelder haben.

PHP.ini begrenzt die Größe der Anfrage (zB post_max_size = 20M wird Ihre Anfrage auf 20MB oder max_input_vars begrenzt = 20 Variablen in Antrag auf 20 begrenzen), so dass es hängt alles davon ab, was begrenzen Sie in Ihrer php.ini verwenden

Also, wenn Sie haben nur begrenzte max_input_vars = 20 und Sie sind in der Lage 20 Bilder in einzelne Post-Anforderung zu senden, für das senden von 50 Bilder auf Server 3-Anforderungen benötigen (maximal 20 Bilder pro Anfrage und 10 für letzte)

Wenn Sie jetzt einfaches einfaches Formular verwenden, kann es den Job nicht ausführen, da Sie mit einem Klick auf Senden-Button Ihr Formular nur einmal senden können. Dafür müssen Sie Ihr Formular mit Javascript (oder jQuery) einreichen. Mit JS können Sie Bilder in mehreren AJAX-Anfragen übermitteln.

Hier ist ein jQuery-Plugin, das sehr effizient die Arbeit erledigen kann https://github.com/zimt28/laravel-jquery-file-upload

Kleine Hilfe für die Verwendung mit Laravel https://laracasts.com/discuss/channels/general-discussion/jquery-file-upload-with-laravel

Glücklich Coding !!