PDA

Bekijk Volledige Versie : performantie upload-thumb scriptje (php)



webber
19/03/04, 12:15
Hello,

Wanneer ik een foto via een form wil uploaden, geeft hij SOMS een fatal
error. Soms doet hij het dus wel, soms niet.
Het script maakt bij het uploaden meteen 3 versies, elk met hun eigen
grootte.
De error die hij geeft:
"Fatal error: Allowed memory size of 33554432 bytes exhausted at (null):0
(tried to allocate 8032 bytes) in ... on line 621"

Op line 621 staat t volgende:
--> $srcImage = imageCreateFromJpeg($src) or die("imageCreateFromJpeg
mislukt");

Weet er iemand raad?
tnx...

Bij een upload doe ik het volgende :

createThumbnail($tempFile,$destFile1,425,425,90);
copyAndThumb($destFile1,$destFile2,220,220,90);
copyAndThumb($destFile2,$destFile3,80,80,90);


function copyAndThumb($src,$dest,$maxWidth,$maxHeight,$qual ity=80) {
global $message;

copy($src,$dest) or die("Kopiƫren van de file ($src) naar ($dest) niet
gelukt");
$srcInfo = pathinfo($src);
$destInfo = pathinfo($destInfo);
createThumbnail($src,$dest,$maxWidth,$maxHeight,$q uality);
}

function createThumbnail($src,$dest,$maxWidth,$maxHeight,$q uality=80) {


if (file_exists($src) && isset($dest)) {
// path info
$destInfo = pathInfo($dest);
$srcInfo = pathInfo($src);

// image src size
$srcSize = getImageSize($src) or die ("$src niet Gevonden");

// image dest size $destSize[0] = width, $destSize[1] = height
$srcRatio = $srcSize[0]/$srcSize[1]; // width/height ratio
$destRatio = $maxWidth/$maxHeight; // width/height ratio


if ($srcRatio >= 1) {
// landscape image

if ($srcSize[0] < $maxWidth)
$maxWidth = $srcSize[0];

$destSize[0] = $maxWidth;
$destSize[1] = (int)($srcSize[1] / ($srcSize[0]/$maxWidth));

if ($destSize[1] > $maxHeight) {
$destSize[0] = (int)($srcSize[0] / ($srcSize[1]/$maxHeight));
$destSize[1] = $maxHeight;
}
}
else {
// portrait

if ($srcSize[1] < $maxHeight)
$maxHeight = $srcSize[1];

$destSize[0] = (int)($srcSize[0] / ($srcSize[1]/$maxHeight));
$destSize[1] = $maxHeight;

if ($destSize[0] > $maxWidth) {
$destSize[0] = $maxWidth;
$destSize[1] = (int)($srcSize[1] / ($srcSize[0]/$maxWidth));
}
}

// path rectification
if ($destInfo['extension'] == "gif") {
$dest = substr_replace($dest, 'jpg', -3);
}

// true color image, with anti-aliasing
$destImage = imageCreateTrueColor($destSize[0],$destSize[1]) or die
("imagecreate mislukt");

// src image
switch ($srcSize[2]) {
case 1: //GIF
$srcImage = imageCreateFromGif($src);
break;

case 2: //JPEG
--> $srcImage = imageCreateFromJpeg($src) or die("imageCreateFromJpeg
mislukt");
break;

case 3: //PNG
$srcImage = imageCreateFromPng($src);
break;

default:
return false;
break;
}

// resampling
imageCopyResampled($destImage, $srcImage, 0, 0, 0,
0,$destSize[0],$destSize[1],$srcSize[0],$srcSize[1]) or die
("imageCopyResampled mislukt");

// generating image
switch ($srcSize[2]) {
case 1:
case 2:
imageJpeg($destImage,$dest,$quality) or die ("imageJpeg
mislukt");
break;

case 3:
imagePng($destImage,$dest);
break;
}
imageDestroy($srcImage);
imageDestroy($destImage);
return true;
}
else {
// Het bestand bestaat niet
return false;
}
}


Bedankt!

Jan Smeelen
21/03/04, 18:35
"webber" <nospam@nospam.com> wrote in message
news:kCA6c.40609$DQ6.2876564@phobos.telenet-ops.be...
> Hello,
>
> Wanneer ik een foto via een form wil uploaden, geeft hij SOMS een fatal
> error. Soms doet hij het dus wel, soms niet.
> Het script maakt bij het uploaden meteen 3 versies, elk met hun eigen
> grootte.
> De error die hij geeft:
> "Fatal error: Allowed memory size of 33554432 bytes exhausted at (null):0
> (tried to allocate 8032 bytes) in ... on line 621"
>
> Op line 621 staat t volgende:
> --> $srcImage = imageCreateFromJpeg($src) or die("imageCreateFromJpeg
> mislukt");
>
> Weet er iemand raad?
> tnx...

Moet je waarschijnlijk bij je webhoster even aankloppen,
zoals de foutmelding al zegt, mag je niet meer geheugen gebruiken
dan 33554432 bytes.

Zover ik me herinner is dat een instelling in de php.ini file,
waar je mogelijk zelf niet bij kan ?

( De vraag is echter of je webhoster die instelling wil wijzigen ? )

Succes !
Jan.

webber
22/03/04, 12:35
"Jan Smeelen" <smeelen@friaco.nl> schreef in bericht
news:405dd127$0$279$6c4e9a8c@reader.news.uudial.eu .uu.net...

> Moet je waarschijnlijk bij je webhoster even aankloppen,
> zoals de foutmelding al zegt, mag je niet meer geheugen gebruiken
> dan 33554432 bytes.
>
Had ik al gedaan, deze limiet is al een limiet die opgetrokken werd. (En
toen was er ook het eigenaardige probleem van : soms werkt het wel, soms
niet).
>
> Succes !
> Jan.
>
Bedankt, zal het nodig hebben ;-)

Daniel Tryba
24/03/04, 02:05
webber <nospam@nospam.com> wrote:
>> Moet je waarschijnlijk bij je webhoster even aankloppen,
>> zoals de foutmelding al zegt, mag je niet meer geheugen gebruiken
>> dan 33554432 bytes.
>>
> Had ik al gedaan, deze limiet is al een limiet die opgetrokken werd. (En
> toen was er ook het eigenaardige probleem van : soms werkt het wel, soms
> niet).

Das maar goed ook, het namelijk niet veel meer dan symptoom
bestrijding...

Mijn gok is overigens dat het niet in de door jou getoonde code zit,
immers daarin worden afaik de door gd gebruikte buffers netjes opgeruimt
en komt het niet reproduceerbaar voor (tenminste ik mag hopen dat je dat
bedoelt als je beweerd dat het niet altijd fout gaat)! Dus wat gebeurd
daar?

--

Daniel Tryba