2015-01-29 3 views
0

У меня есть сайт для фотографии, над которым я работаю в Laravel. Я использую пакет под названием Intervention/Image. В административной области сайтов это место, где администраторы могут создавать проекты, а затем загружать любое количество изображений в этот проект. Проблема заключается в том, что если образы значительны 4mb или больше, и есть 10 или более загружается в одно время я получаю эту ошибку:Laravel Intervention/Image Максимальное время выполнения 30 секунд превышено

Maximum execution time of 30 seconds exceeded 

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

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

Я не уверен, что вызывает проблему при загрузке или запросах. Ниже приведен контроллер, который загружает изображения. В качестве побочного примечания сценарий также создает четыре размера файла, а также каждого изображения.

<?php 

class UploadController extends BaseController { 

    private $sizes = array('large' => 2000, 'medium' => 1500, 'small' => 1000, 'thumb' => 300); 

    public function upload($id) { 

     $movedArray = array(); 
     $errors = 0; 

     $images = Input::file('images'); 

     foreach($images as $img) { 

      $oName = $img->getClientOriginalName(); 
      $oMimeType = $img->getMimeType(); 
      $oSize = $img->getSize(); 
      $oExt = $img->getClientOriginalExtension(); 
      $oTemp = $img->getRealPath(); 

      // get original file name 
      $name = str_replace(array(' '), array('-'), $oName); 

      $orig = $oTemp; 

      $image_original = Image::make($img); 

      foreach($this -> sizes as $sizename => $size) { 

       $movedPath = public_path() .'/projects/'; 
       $movedName = strtotime('now') .'-'. $id .'-'. $sizename .'-'. $name; 

       $moved = $image_original -> resize($size, null, function($constraint) { 

        $constraint -> aspectRatio(); 

       }); 

       $resizedMoved = $moved -> save($movedPath . $movedName); 

       $movedArray[$sizename] = $movedName; 

      } 

      // create the record in the database 
      $upload = new Upload; 

      $upload -> user_id = Auth::id(); 
      $upload -> project_id = $id; 

      $upload -> thumbnail = $movedArray['thumb']; 
      $upload -> small = $movedArray['small']; 
      $upload -> medium = $movedArray['medium']; 
      $upload -> large = $movedArray['large']; 

      $upload -> file_type = $oMimeType; 
      $upload -> file_size = $oSize; 
      $upload -> file_extension = $oExt; 

      $upload -> save(); 

     } 

     if($errors > 0) { 
      Session::put('alert-class', 'success'); 
      Session::put('msg', 'All files have been uploaded'); 
     } else { 
      Session::put('alert-class', 'danger'); 
      Session::put('msg', 'Uh oh, something went wrong please try again'); 
     } 

     return Redirect::back(); 

    } 
} 

Является ли это единственной возможностью повернуть память и установить ограничение по времени? Если это так, я чувствую, что это плохо программирование, потому что я уже установить это:

ini_set("memory_limit","1000M"); 
set_time_limit(1000); 

И я все еще получаю ту же ошибку, что любая помощь будет принята с благодарностью! Благодаря

+0

@ DamianMąsior Jesus, возможно, что это такое, я посмотрел на max_file_uploads и его набор на 20 и max_input_vars 2500. Если вы поместите это как ответ, я буду отмечать его правильно! –

ответ

1

Ошибки ваш иметь не имеет ничего общего с ограничением памяти, но с ограничением по времени и вы имели эту проблему из-за многие манипуляции на изображения, а также загрузить его самостоятельно. Укажите, где вы установили элемент set_time_limit (1000).

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

+0

Я фактически поставил set_time_limit() прямо в UploadController. Мне нравится эта часть, хранения данных изображений в массиве и последующего создания одного запроса! –

+0

, вы можете попробовать отредактировать его через php.ini - 'max_execution_time' заметить, что это только время выполнения php-эффекта, и вам может потребоваться изменить время выполнения apache/nginx/whatever_web_server_your_using'. – Gal

+0

Спасибо, к сожалению, у меня нет доступа к любой из этих вещей с момента его совместного размещения. –

1

Изменить

max_file_uploads 

в вашем php.ini :)

+0

Я изменил это, и я все равно получаю ту же ошибку. –

+0

Вы перезапустили apache или другой сервер после изменения? –

+0

Нет. Я не уверен, как это сделать. Я нахожусь на гостевом хостинге Godaddy. –

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