Gå til innhold

Minneproblemer, Fatal error: Allowed memory size..


Anbefalte innlegg

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
Videoannonse
Annonse

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 :hmm: Et annet alternativ er at dette er en bug. Hvilken php-versjon er det snakk om her?

Lenke til kommentar
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 :hmm: 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

$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 av boy2star
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...