2016-11-23 2 views
1

Прошу прощения, если это было задано. Я не могу найти правильные ключевые слова для поиска в google. Поэтому я решил спросить здесь в SO.queries многократная загрузка файла в php

прямо сейчас, у меня есть функция загрузки, которая встроена в laravel, где она может загружать до 20 изображений за раз, но клиент хотел бы, чтобы это было 50 изображений за раз, поэтому я думаю, t редактировать php.ini каждый раз, когда клиент хочет увеличить максимальную загрузку в то же время, потому что это может сломать сервер.

возможно в php для загрузки в очередь, как 10 изображений для этой второй следующей секунды, это 10 изображений снова, пока загрузка не будет выполнена, чтобы сервер не сломался.

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

Если я понял, что да, я уверен, вы можете установить переменную счетчика (т.е. '$ count = 1;') перед циклом 'foreach' и делать' if ($ count% 10 == 0) {sleep (1); } $ count ++; 'непосредственно перед концом цикла foreach. Это остановит процесс на секунду после каждого набора из 10 загрузок, а затем повторит цикл. Но я не уверен, что это не вызовет ограничения. – Zeke

ответ

0

Я не уверен, что установка используется для загрузки изображений, поэтому я предполагаю, что у вас есть простая простая форма с полями вводом 20 файлов.

PHP.ini ограничивает размер запроса (например, post_max_size = 20M ограничивает ваш запрос до 20 МБ или max_input_vars = 20 ограничивает переменные в запросе до 20), поэтому все зависит от того, какой предел вы используете в своем PHP.ini

Так что, если вы ограничены max_input_vars = 20, и вы можете отправить 20 изображений в одном запросе после, для отправки 50 изображений на сервер потребуется 3 запросов (не более 20 изображений на каждый запрос и 10 для последней)

Теперь, если вы используете простую форму, то он не может выполнить эту работу, потому что, нажав кнопку «Отправить», вы сможете отправить свою форму только один раз. Для этого вам нужно будет отправить свою форму, используя javascript (или jQuery). Используя JS, вы сможете отправлять изображения в несколько запросов AJAX.

Вот плагин JQuery, который может сделать эту работу очень эффективно https://github.com/zimt28/laravel-jquery-file-upload

Маленькой помощи для использования его с Laravel https://laracasts.com/discuss/channels/general-discussion/jquery-file-upload-with-laravel

День Coding !!

Смежные вопросы