2009-05-25 10 views
1

Hallo an alle, ich versuche, ein Bild von 700kb mit imagecreatefromjpeg zu skalieren.imagecreatefromjpeg Problem mit Speicher

Dies gibt den Fehler: Fatal error: Erlaubt Speichergröße von 25.165.824 Bytes erschöpft (versuchte 9356 Bytes zuzuteilen)

Zuerst wird das memory_limit 8M war dann setzen wir diese auf 24 M, aber dann gibt es noch den Fehler. Ist das ein Speicherleck? Was könnte passiert sein? Wir haben Apache bereits neu gestartet.

Hier ist ein Code für diejenigen, die interessiert sind:

function getResizedBackgroundImageURL($afb="",$params="") { 
#1. Verwijder webroot 
$filename=C_Settings::getFileRoot().str_replace(C_Settings::getWebRoot(),"",$afb); 
$i=strrpos($filename,"."); 
if ($i!==FALSE) { 
    $ext=substr($filename,$i); 
    $basefilename=substr($filename,0,$i); 

    #Parse width/height params 
    $a=explode("&",$params); 
    foreach($a as $attr) { 
     $b=explode("=",$attr); 
     if ($b[0]=="w") { 
      $w=$b[1]; 
     } elseif ($b[0]=="h") { 
      $h=$b[1]; 
     } 
    } 

    if (!is_numeric($w)) { 
     die("Missing param w for getResizedBackgroundImageURL"); 
    } 

    if (!is_numeric($h)) { 
     die("Missing param h for getResizedBackgroundImageURL"); 
    } 

    #Compose new filename 
    $newFilename=$basefilename."_w".$w."_h".$h.$ext; 
    #See if the resized image exists 
    if (!file_exists($newFilename)) { 
    if (is_file($filename)) { 
     if($ext==".jpg" || $ext==".jpeg"){ 

      $image_org=imagecreatefromjpeg($filename); 


     } 
     if($ext==".gif") { 
      [email protected]($filename); 
     } 

     if ($image_org) { 
      list($wp,$hp,$type,$attr)=getimagesize($filename); 
      $hfactor=$hp/$h; 
      $wfactor=$wp/$w; 
      if ($hfactor > $wfactor) { 
      $factor=$hfactor; 
     } else { 
      $factor=$wfactor; 
     } 
       if($wp > $w || $hp > $h) { 
     $image_w=$wp/$factor; 
     $image_h=$hp/$factor; 
     }else{ 
      #if image fits the given boundaries, do not resize 
      $image_w=$wp; 
     $image_h=$hp;    
     } 
     //Note: PHP with GD2.0 required for imagecreatetruecolor 
     $img_copy=imagecreatetruecolor($image_w, $image_h); 
     imagecopyresampled($img_copy, $image_org, 0, 0, 0, 0, $image_w, $image_h, $wp, $hp); 

      if (@imagejpeg($img_copy, $newFilename, 80)) { 
       chmod($newFilename,0777); 
      } else { 
       echo("<b>Error: </b>Unable to create image $newFilename. Check directory permissions."); 
      } 

      imagedestroy($image_org); 
      imagedestroy($img_copy); 
    } 
    }  
    } 
    $newURL=C_Settings::getWebRoot().str_replace(C_Settings::getFileRoot(),"",$newFilename); 
    return $newURL;  
} 

}

+0

Können Sie Code anzeigen? –

+0

Ich habe einen Codecode hinzugefügt – sanders

+0

Ich hatte dieses Problem in letzter Zeit. Wenn Sie Ihren Speicher auf 64M einstellen, sollten einige JPEGs aus irgendeinem Grund Tonnen Speicher benötigen. – karim79

Antwort

8

Ihr Gedächtnis erhöhen, bis Sie genug haben und stellen Sie sicher, imagedestroy(), wenn Sie fertig sind mit Ihrer Verarbeitung verwenden.

ini_set("memory_limit","10000M"); 
+0

das habe ich gemacht. 30 M war genug – sanders

Verwandte Themen