Laravel Intervention / Image Превышено максимальное время выполнения 30 секунд

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

Maximum execution time of 30 seconds exceeded

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

Я также пробовал меньшие изображения размером 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);

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

1

Решение

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

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

2

Другие решения

+ Изменить

max_file_uploads

в твоем php.ini 🙂

1

По вопросам рекламы [email protected]