07. november 2006 - 20:01Der er
25 kommentarer og 1 løsning
Resize script - out of memory?
Hey Jeg har et script der uploader billeder til et bibliotek (upload) og filnavnet på billedet + dertil hørende tekst til en mysql database. Scriptet er klassisk opbygget med formularfelter osv. Når man trykker på submit knappen, springer den til filen test.php. $output .= '<form action="test.php" method="post" enctype="multipart/form-data">';
if(resize($_FILES['myFile']['tmp_name'], $curDir . $uploadDir . $file, 150, 150)) { mysql_query("INSERT INTO tbl_716418(filename,design,email,kategori,header,pris,comment,added) VALUES('".$file."','".$session->username."','".$email."','".$kategori."','".$header."','".$pris."','".$comment."',NOW())") or die(mysql_error()); $output .= 'Filen er uploadet<hr />'; } } } ?>
Hvis jeg prøver at uploade et meget stort billede, så får jeg fejlen: Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 9216 bytes) in /customers/xxx.dk/xxx.dk/httpd.www/test.php on line 73
Linie 73 er:::: $srcim = imagecreatefromjpeg( $filename );
Fejlen skulle vist skyldes, at scriptet bruger mere hukommelse end den har tilladelse til... De billeder jeg uploader fylder meget mindre end den øverste grænse, som mit hotel har sat (16mb)
Men fordi det er JPEG så skal den også "decompresse" billedet og lave et bitmap i hukommelsen, og så fylder det pludseligt meget! ;) Tag f.eks. mit 6Mpixel kamera, det laver billeder på 3072x2048, et jpeg er truecolor og kræver derfor (vist) 3 bytes per pixel, plus noget overhead... Det er over 18MB pr billede!
crap!!!! Hvad gør jeg så... jeg kan se, at de eneste billeder jeg må uploade med dette script er billeder i størrelsesorden 1-2 mb... og det holder jo ikke.
Ja og nej. Alle php-scripts der benytter GD vil have problemet. Du kan prøve at lave en google på php imagemagick convert resize - det kan være du kan komme udenom problemet ved brug af den - det kræver dig at din host har installeret imagemagick ;)
jeg bruger one.com (b-one)... så jeg tvivler på at de har installeret imagemagick.
Jeg synes bare at det er mærkeligt. Der findes jo en milliard sider hvor man kan uplade billeder... jpg, som garanteret vel også fylder meget. Hvad gør de????
Har du kendskab til et andet resize script jeg kan afprøve.
Og hvad betyder GD???
Kunne en måde at løse problemet på, være at anvende thumbnails... eller det har måske ikke noget med det at gøre?
Hvis jeg indsætter den linie du har forslået får jeg fejlen: Warning: shell_exec() [function.shell-exec]: Cannot execute using backquotes in Safe Mode in /.... test.php
Det er vel meget rimeligt at en webhoteludbyder sætter grænser for brug af RAM. 16MB er da ret godt - jeg kan se jeg har en på 7M - og een på 32 MB. Men man kan jo også have egen server, og sætte størrelsen til hvad man vil - så er der jo heller ikke andre at genere.
(b-)one.com er nok ikke til at forhandle med. Hvad med at lave billedet mindre før upload. Eller skift udbyder?
Jeg har forresten lige mailet med one.com.. de har ikke installeret imagemagick, men foreslår at jeg bruger GD2, som de har installeret. Giver det mening?????
jeg må indrømme, at jeg ingen ide har om GD teknologi? Jeg vil derfor blive meget glad for din hjælp :-)
Jeg har været inde på http://www.boutell.com/gd/ og downloaded en zipfil indeholdende det jeg tror er GD2. Der står at man skal installere "programmet" - der er en vejledning i, hvordan jeg skal bruge det.
Jeg synes bare at der er underligt at jeg tilsyneladende skal installere noget på mit hotel for at bruge GD2... jeg troede at det lå indlejret i php?
Nej, du *KAN* sikkert ikke installere det på dit webhotel, det er noget der burde være i PHP (med mindre din webhost har valgt ikke at tage den med). Lav evt en php fil:
Ok... One.com (mit hotel) har jo også skrevet til mig at de har installeret GD 2, og ikke imagemagic.
Når jeg kommer hjem i eftermiddag afprøver jeg det du netop har forslået...
Jeg er stadig i tvivl hvad jeg skal pille ved, for at få mit script til at virke.
Hvis vi går ud fra at mit hotel kører gd2, men at jeg med mit nuværende script ikke kan uploade billeder der fylder mere end 1.3 mb, ligger fejlen så i den del af mit script som handler om selve resize delen?
Ja, enten så lav thumbnails på din egen maskine, eller gør originalbillederne lidt mindre så PHP kan håndtere dem... Hvis du vil lave dem på din egen maskine, kan du nok bruge irfanview: www.irfanview.com - den kan lave thumbs ud af en masse billeder i ét hug...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.