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 № 1W 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;
}