Wat voor giga bestand wil je uploaden? Begrijp ik goed dat het hier om een bestand gaat van 20971520 dus even simpel gezegd 20mb? Vaak hebben hosting bedrijven een max gesteld aan de grootte van de te uploaden bestanden. Heeft het misschien hier iets mee te maken?
<?php
$map = "upload/"; // dir waar de foto's staan
$map_large = "pic_large/"; // dir waar de grote foto's komen
$nwidth = "640"; // nieuwe breedte
$nheight = "480"; // nieuwe hoogte
$maxwidth = "8000"; // maximale breedte
$maxheight = "6000"; // maximale hoogte
$name = "pic_"; // prefix voor afbeeldingen
$handle=opendir("$map");
//uitlezen van de dir
while (false!==($naam = readdir($handle))) {
// controle dat niet perongeluk andere foto's ook worden gecropt
if ($width >= $maxwidth || $height >= $maxheight){
echo "<a href=$file target='blank'>Sorry <b>" . $naam .
"\n<b> is te groot " . $height ." X " . $width. "</a><br>\n
";
//opnieuw aanmaken en opslaan over het orgineel heen
$pic = ImageCreateTrueColor($nwidth, $nheight);
$cpyImage = ImageCreateFromJPEG($file);
imagecopyresampled
($pic,$cpyImage,0,0,0,0, $nwidth,$nheight,$width, $height);
$nw_file = $map_large . $name . ".jpg";
imagejpeg($pic,$nw_file);
}
}
}
// en de dir weer sluiten voor de netheid
closedir($handle);
// bevestiging weergeven
//echo ("Afbeeldingen verkleind naar $nwidth x $nheight <a href=\"resize_thumb.php\"><br>Ga verder</a>");
// verwijderen van origineel
?>
Je geheugen loopt vol, er mag maximaal 20mB gebruikt worden.
Dit komt waarschijnlijk omdat er in die directory meerdere bestanden staan, die je wil resizen. Deze bestanden worden ingeladen in het geheugen door php, maar je geeft het geheugen nergens vrij. Nu wordt het geheugen pas vrij gegeven als de garbage collector langs komt en dat is pas na het uitvoeren.
Simpel gezegd, je zal het geheugen moeten gaan vrijgeven door gebruik te maken van [php]imagedestroy[/php]().