Problem polega na optymalizacji operacji w trakcie przetwarzania obrazka - zmiana rozdzielczosci i jego ponowne zapisanie! Przesyłanych pól w formularzu jest 7. Problem zaczyna się kiedy wysyłam pliki graficzne których wielkości przekracza 256 kb - i jest ich kila w pewnym momencie pojawia się błąd o treści:
Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 8704 bytes) in /home/.../ftp/.../spr3.php on line 101
Serwer na którym pracuje ma wprowadzone ograniczenie 20MB.
Może znacie sposób obróbki obrazka inny niż ja - lub jak podzielić mój skrypt na operacje aby się zmieścić w limicie??
Oto kod!:
function k1(){ ?> <INPUT TYPE="HIDDEN" NAME="action" VALUE="d1"> <input type="file" name="zdj_p1" size="20"> <div align="center"> <input type="submit" name="w" value="Zapisz"> <input type="reset" value="Skasuj"> </div> </FORM> <? } function d1(){ $zdj1 = $_FILES['zdj_p1']; $stos=0; $stos++; //Zapisywanie wartości zdjęcia do zmiennych $nazwa = $_FILES['zdj_p1']['name']; $typ = $_FILES['zdj_p1']['type']; $size = $_FILES['zdj_p1']['size']; $plik = $_FILES['zdj_p1']['tmp_name']; $wielkosc = 200000;//Wielkość przesyłanego pliku - 200KB $x = 600;//Szerokość w Pixelach $filename = ''; $filename .= $stos; $filename .= $id; $filename .= 'o'; $mojaNazwa = $filename.'.jpg'; $sciezka = 'img/'; //Przetwarzanie obrazka z formatu jpg i jpeg $zdj = ImageCreateFromJpeg($plik); $zdjx = ImageSX($zdj); $zdjy = ImageSY($zdj); $nowezdj = imagecreatetruecolor($x, $y); imagecopyresized($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy); imagejpeg($nowezdj, $sciezka . $mojaNazwa ,100); } //Przetwarzanie obrazka z formatu gif $zdj = ImageCreateFromGIF($plik); $zdjx = ImageSX($zdj); $zdjy = ImageSY($zdj); $nowezdj = imagecreatetruecolor($x, $y); imagecopyresized($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy); imagejpeg($nowezdj, $sciezka . $mojaNazwa ,100); } //Przetwarzanie obrazka z formatu png $zdj = ImageCreateFromPng($plik); $zdjx = ImageSX($zdj); $zdjy = ImageSY($zdj); $nowezdj = imagecreatetruecolor($x, $y); imagecopyresized($nowezdj,$zdj,0,0,0,0,$x,$y,$zdjx,$zdjy); imagejpeg($nowezdj, $sciezka . $mojaNazwa ,100); } else{ } } } ?>
a to wynik działania tego formularza:
array (
'action' => 'd1',
'w' => 'Zapisz',
)
array (
'zdj_p1' =>
array (
'name' => 'list motywacyjny1.jpg',
'type' => 'image/jpeg',
'tmp_name' => '/tmp/php9Izb0I',
'error' => 0,
'size' => 258787,
),
'zdj_p2' =>
array (
'name' => 'List[Andrzej].GIF',
'type' => 'image/gif',
'tmp_name' => '/tmp/phpjCXT0F',
'error' => 0,
'size' => 183603,
),
'zdj_1' =>
array (
'name' => 'error.jpg',
'type' => 'image/jpeg',
'tmp_name' => '/tmp/phpiTN7n4',
'error' => 0,
'size' => 365525,
),
'zdj_2' =>
array (
'name' => '',
'type' => '',
'tmp_name' => '',
'error' => 4,
'size' => 0,
),
'zdj_3' =>
array (
'name' => '',
'type' => '',
'tmp_name' => '',
'error' => 4,
'size' => 0,
),
'zdj_4' =>
array (
'name' => '',
'type' => '',
'tmp_name' => '',
'error' => 4,
'size' => 0,
),
'zdj_5' =>
array (
'name' => '',
'type' => '',
'tmp_name' => '',
'error' => 4,
'size' => 0,
),
)
Nazwa - list motywacyjny1.jpg
Typ - image/jpeg
Wielko�ć kb - 258787
to jest JPG
Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 8704 bytes) in /home/.../ftp/.../spr3.php on line 101