/ / Jak wgrać obraz w dużym rozmiarze za pomocą obrazu interwencyjnego w Laravel 5 - laravel, laravel-5, interwencja

Jak przesłać obraz o dużym rozmiarze przez obraz interwencji w Laravel 5 - laravel, laravel-5, interwencja

Używam Interwencja obrazu w moim projekcie.

Moja aplikacja działa płynnie podczas przesyłania obrazów o małych rozmiarach. Ale gdy próbuję przesłać obraz o dużym rozmiarze (> 2 MB), moja aplikacja przestaje działać!

Nawet nie pokazuje prawidłowych błędów. Czasami to pokazuje Token mismatch błąd i czasami adres URL nie przekierowuje.

Jak to naprawić? Nie mam pojęcia.

Oto mój kod:

$post->new Post();

if($request->hasFile("image")){
$image=$request->file("image");
$filename=Auth::user()->id."_".time().".".$image->getClientOriginalExtension();
$location=public_path("images/".$filename);
Image::make($image)->save($location);

$post->image=$filename;
}

$post->save();

Używam Image intervention do przesyłania zdjęć. Ale możesz również zasugerować alternatywę.

Dzięki!

Odpowiedzi:

3 dla odpowiedzi № 1

W rzeczywistości jest to problem z ustawiania wartości zmiennych po stronie serwera na php.ini plik. jeśli prześlesz więcej niż ustawienie post_max_size serwera, dane wejściowe będą puste, otrzymasz Niedopasowanie tokenów błąd.

zmiana upload_max_filesize , post_max_size wartość zgodnie z wymaganiami i zrestartuj serwer.


0 dla odpowiedzi nr 2

Okazuje się, że jest to problem z pamięcią. Jeśli sprawdzisz dziennik błędów, zobaczysz, że na serwerze zabrakło pamięci. Zobaczysz coś takiego

PHP Fatal error:  Allowed memory size of XXXXXXXX bytes exhausted (tried to allocate XXXXX bytes) in ...

Ponieważ obraz interwencyjny odczytuje cały obraz piksel po pikselu, utrzymując dane w pamięci, pozornie małe obrazy, takie jak 2 MB, mogą wymagać przetworzenia dziesiątek MB pamięci.

Może być konieczne ustawienie limitu pamięci na najwyższy dostępny i sprawdzenie rozmiaru pliku przed jego otwarciem, ponieważ witryna, która pęka bez komunikatów o błędach, jest krępująca. Użyj czegoś takiego

if( $request->hasFile("image") && $request->file("image")->getClientSize() < 2097152 ){
$image=$request->file("image");
$filename=Auth::user()->id."_".time().".".$image->getClientOriginalExtension();
$location=public_path("images/".$filename);
Image::make($image)->save($location);

$post->image=$filename;
}