Hallo,

Ik heb me eens bezig gehouden met een script om afbeedlingen up te loaden en te verkleinen, met wel wat hulp van verschillende bestaande scripten... Hier is dus het belangrijkste deel van het script:

<?
$newwidth='500';
$newheight='500';
$dir = "images/";

$maxsize = 2500000;

if (is_uploaded_file($_FILES['bestand']['tmp_name']))

{
if(filesize($_FILES['bestand']['tmp_name']) > $maxsize){



echo "<span style=\"color: red\">!! Foto 1 is te groot.</span><p>";

} else {



$pathinfo = pathinfo($_FILES['bestand']['name']);

$ext = strtolower($pathinfo["extension"]);

$a = ".$ext";

$naam= @foto_. date("dmyHis") .$a;


if ($ext == "jpeg" || $ext == "jpg" || $ext == "gif" || $ext == "png"){
move_uploaded_file($_FILES['bestand']['tmp_name'], $dir.$naam) or die("Onze excuses, maar het kan niet uploaden.

Waarschijnlijk is uw foto te groot.<br>

<a onclick=\"javascript:history(-1);\">Ga Terug en probeer iets anders!</A> ");

$pics=$dir.$naam;


list($width, $height) = getimagesize($pics);
if($width > $height && $newwidth < $width){
$newheight = $height / ($width / $newwidth);
} else if ($width < $height && $newheight < $height) {
$newwidth = $width / ($height / $newheight);
} else {
$newwidth = $width;
$newheight = $height;
}
if(preg_match("/.jpg/i", "$pics")){
$source = imagecreatefromjpeg($pics);
}
if(preg_match("/.jpeg/i", "$pics")){
$source = Imagecreatefromjpeg($pics);
}
if(preg_match("/.png/i", "$pics")){
$source = imagecreatefrompng($pics);
}
if(preg_match("/.gif/i", "$pics")){
$source = imagecreatefromgif($pics);
}

$thumb1 = imagecreatetruecolor($newwidth, $newheight);
imagecopyresized($thumb1, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

if(preg_match("/.jpg/i", "$pics")){
imagejpeg($thumb1,$dir.$naam,100);
}
if(preg_match("/.jpeg/i", "$pics")){
imagejpeg($thumb1,$dir.$naam,100);
}
if(preg_match("/.png/i", "$pics")){
imagepng($thumb1,$dir.$naam,100);
}
if(preg_match("/.gif/i", "$pics")){
imagegif($thumb1,$dir.$naam,100);
}

$x=$newwidth;
$y=$newheight;

}
else {
echo "<span style=\"color: red\">Foute extensie van foto 1!! Afbeeldingen mogen enkel gif, jpg, jpeg of png zijn!</span>";
}
}

}
?>

... Daarna sla ik naam en width, height op in een database, maar dat is niet zo belangrijk. Het probleem is dat het bij foto's > 1,5MB niet werkt... Ziet er iemand misschien een fout?


U kan dit script toegepast hier zien:
http://www.hermancandries.be/uwsite/foto.php

EDIT: typfoutje
Er is sowieso een maximum aan bestanden die je kunt uploaden, meestal 2 MB. Verder hebben functies als imagecopyresized (waarom gebruik je trouwens niet imagecopyresampled?) een maximum qua geheugengebruik.
Beste Jan,

Ik heb imagecopyresampled gebruikt ipv. imagecopyresized, wat inderdaad beter gaat, maar toch heb ik nog steeds het probleem dat hij niet werkt bij foto's > 2,5MB. Hoe kan dat, normaal zou ik toch een error moeten krijgen:

<?
if(filesize($_FILES['bestand']['tmp_name']) > $maxsize){



echo "<span style=\"color: red\">!! Foto 1 is te groot.</span><p>";

}
?>
Weet iemand misschien hoe het komt dat ik de error niet krijg, werkt de filesize niet ofzo?
Je kunt via een .htaccess bestand apache vertellen grotere upload te accepteren. Daarnaast is, wat Jan zegt, je geheugengebruik verruimen, php converteert het namelijk naar een soort bmp bestand, dus gigantsich groot!
Ik kan htaccess zelf niet wijzigen, en ik heb mijn hoster al gevraagd voor grotere uploads toe te staan, maar dat willen ze niet.

Maar hoe zit dat juist met dat bmp bestand? Normaal zou ik toch gewoon met "filesize > 2MB" moeten kunnen werken?
upload size in bytes...

<?php
function maxsize(){
$values = array(
ini_get('upload_max_filesize'),
ini_get('post_max_size'),
ini_get('memory_limit')
);
natcasesort($values);
$max = array_shift($values);
if(false !== stripos($max, 'M')){
$max = intval($max) * pow(1024, 2);
}
return $max;
}
?>

een image met gd vreet daarnaast geheugen...
breedte * hoogte * bitrate

ini setting memory limit moet je eventueel verhogen.
Ey,
Is het de bedoeling dat hij in een map komt
of in je mailbox??
ik heb er een die upload wel en wordt doorgestuurd naam je mailbox.
Normaal is het de bedoeling dat de foto's upgeload worden naar de map "images". Maar het kan allemaal zijn dat het script veel geheugen vereist, maar dan zou dit toch moeten werken:

<?
if(filesize($_FILES['bestand']['tmp_name']) > $maxsize){

echo "<span style=\"color: red\">!! Foto 1 is te groot.</span><p>";

}
?>

Probeer zelf maar eens, het geeft gewoon niets van errors bij foto's > 2MB.
Het vreemde is dat ik "maxsize = 20000" (=20Kb) heb gezet, en dat de foutmelding dan nog steeds niet komt...
Heeft niemand een idee waarom ik geen foutmelding krijg bij te grote foto's? Normaal gezien zou het toch direct via filesize tot de conclusie moeten komen dat het bestand te groot is...?
OK, ik heb gevonden dat standaard ingesteld staat dat upload_max_filesize "2M" is. Kan ik er op de een of andere manier dan toch voor zorgen dat je een foutmelding krijgt bij foto's > 2MB, want nu krijg je gewoon een leeg scherm...

Reageren