OeO Skrevet 23. juni 2006 Del Skrevet 23. juni 2006 Hei, er ny i php, men prøver meg litt frem. Beklager derfor for lite kunnskap, dårlig kode, dårlige formuleringer, og dårlig/mangel på kommentarer. Har et script som resizer et bilde sendt inn med form, for så å lagre det på serveren med ftp funksjon. Problemet er bare at jeg får feilmeldingen: Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 6409 bytes) in *siden* on line 39. Som dere ser har serveren mulighet for 32 MB med minne, som burde være mer enn nok. Scriptet funker fint med små bilder, ca 100kb, men når jeg prøver med 300 kb store får jeg feilmeldingen. linje 39 er: $tmp_image=imagecreatefromjpeg($fil); ( $fil = $_FILES['fil']['tmp_name']; ) Hele php-koden er veldig uoversiktlig og ikke godt kommentert. Også fått noe kode fra php.net //i head.php ligger meny, toppen av siden, og mysql info osv <?php include('head.php'); echo "<div id='main'>"; // HER STARTER BILDEDELEN //av en eller annen grunn ville jeg være på den sikre siden under.... If ($_FILES['fil']['tmp_name'] == NULL || $_FILES['fil'] == NULL || $_FILES['fil']['name'] == NULL) echo "Et bilde ble ikke valgt eller sendt.<br>"; elseif ($_FILES['fil']['type'] != 'image/jpeg') { echo "Bildet må være i JPG eller JPEG format<br>"; } else { // set up basic connection $conn_id = ftp_connect($ftp_server); // login with username and password $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // check connection if ((!$conn_id) || (!$login_result)) { echo "<br>Kan ikke laste opp bilder...<br>"; exit; } // filnavn osv (min egen måte for å lage unikt filnavn til bilde) $fil = $_FILES['fil']['tmp_name']; $filfornavn = time() . "_" . rand(0,100) . "_"; $filnavn = $filfornavn . $_FILES['fil']['name']; $thumbnavn = $filfornavn . "thumb_" . $_FILES['fil']['name']; $mappe = $bildemappe; $destination_folder = $sideroot . $mappe; //RESIZE STARTER, alt som har med selveste resizinga har ikke jeg laget //sette parametere osv $new_width = 200; $new_height = 150; $tmp_image=imagecreatefromjpeg($fil); $width = imagesx($tmp_image); $height = imagesy($tmp_image); $new_image = imagecreatetruecolor($new_width,$new_height); ImageCopyResized($new_image, $tmp_image,0,0,0,0, $new_width, $new_height, $width, $height); //Grab new image ob_start(); ImageJPEG($new_image); $image_buffer = ob_get_contents(); ob_end_clean(); ImageDestroy($new_image); //Create temporary file and write to it $fp = tmpfile(); fwrite($fp, $image_buffer); rewind($fp); //etter dette kommer opplasting til serveren, og behandling av tekst fra $_post. Det jeg ikke skjønner er hvordan dete sciptet kan bruke 32MB med minne. Finnes det en måte å "tømme" minne på eller lignende? Eller kanskje finne ut hva de 32 MB går til? Lenke til kommentar
Martin A. Skrevet 23. juni 2006 Del Skrevet 23. juni 2006 Skriv dette i ei php-fil <?php phpinfo(); ?> Der finner du memorylimiten, så øker du den til feks ini_set("memory_limit", "16M"); Et googlesøk på første del av feilkoden gir deg som oftest svaret. Lenke til kommentar
Ernie Skrevet 23. juni 2006 Del Skrevet 23. juni 2006 Uhmm ... har du i det heltatt lest trådstarters innlegg? Han har akkurat nå en grense på 32MB, dessuten selv 8MB (som er standard) skal være mer enn nok for det her. Normalt får man denne erroren når man har en loop eller rekursjon som går løpsk, men i dette tilfellet har man ikke det Et annet alternativ er at dette er en bug. Hvilken php-versjon er det snakk om her? Lenke til kommentar
Martin A. Skrevet 23. juni 2006 Del Skrevet 23. juni 2006 Uhmm ... har du i det heltatt lest trådstarters innlegg? Han har akkurat nå en grense på 32MB, dessuten selv 8MB (som er standard) skal være mer enn nok for det her. Normalt får man denne erroren når man har en loop eller rekursjon som går løpsk, men i dette tilfellet har man ikke det Et annet alternativ er at dette er en bug. Hvilken php-versjon er det snakk om her? 6369563[/snapback] Satt på jobb når jeg skrev det. Tok et raskt googlesøk på feilkoden, og det var det svaret jeg fikk fra de 10 første treffene. Merkelig feil. Eneste jeg kan komme på, er at han har smelta mange kodesnutter i en stor suppe. Feks her $mappe = $bildemappe; $destination_folder = $sideroot . $mappe; Hvor angir du $bildemappe, og $sideroot? Selve resizingen med faste variabler vil lage et grusomt stygt bilde. Med mindre oppløsningen er feks 600*450. Lenke til kommentar
OeO Skrevet 23. juni 2006 Forfatter Del Skrevet 23. juni 2006 (endret) $bildemappe og $sieroot angir jeg i head.php Legger inn alle variabler som er spesifikk for server og database der, så slipper jeg å endre det flere steder når siden skal flyttes senere. Det at jeg ikke henviser til dem direkte er ren latskap, så slapp jeg å endre koden når jeg ville legge denne infoen i head.php Forholdet 4:3 er veldig vanlig på bilder, og jeg driter litt i om det av og til kan bli litt stygt. Man får uansett muligheten til å se det orginale bildet... Finnes det en måte å forbrede minne på at det må være plass der? en allocate elns? EDIT: La inn apache og php5, endret fra ftp til file_put_contents. Så nå funker alt på maskinen min. Får desverre ikke testet scriptet ordentlig på den egentlig web-serveren, siden den bruker php4. Endret 24. juni 2006 av boy2star Lenke til kommentar
Skaptrollet Skrevet 26. juni 2006 Del Skrevet 26. juni 2006 har samme problemet med php5! skal uploaden behandle et bilde på 100kb går det greit, men med engang det er flere bilder eller større størrelse så trenger den 40-64mb for å ikke feile, og da følger jeg med på httpd prosessen som bruker opp mot 64mb minne, og bruker det selv noen minutter etter at siden er ferdig loadet så jeg vil tro det er memory leak eller en bug ellerno? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå