2009-05-25 19 views
1

こんにちは皆私はimagecreatefromjpegで700kbのイメージのサイズを変更しようとしています。imagecreatefromjpegメモリの問題

これはエラーを与える:致命的なエラー:25165824バイトの許可メモリサイズが使い果たさ(9356バイトを割り当てしようとした)

ファーストにのmemory_limitを8Mはその後、我々は24 Mに設定したが、それはまだエラーを与えるました。 これはメモリリークですか?何が起こったのだろうか?すでにApacheを再起動しました。ここで

は興味がある人のためのいくつかのコードです:あなたは十分に持っていて、(imagedestroyを使用していることを確認するまで、あなたがあなたの処理で行われたときに

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

いくつかのコードを表示できますか? –

+0

いくつかのコードコードを追加しました – sanders

+0

最近この問題がありました。メモリを64Mに設定すると何らかの理由でメモリが必要になることがあります。 – karim79

答えて

8

)あなたのメモリを増やします。

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

それは私がやったことです。 30Mで十分だった – sanders