Speicherproblem bei Fotoupload mit Bildbearbeitung

mihawk

Mitglied
Hallo zusammen.
Ich habe ein Tool programmiert, mit dem eigentlich Bilder bis zu 4MB hochgeladen werden sollen können (wenn das grad mal grammatisch korrekt war *g*) und dann quasi auf eine festgelegte Maximalgröße gestaucht werden. Aus irgendeinem Grund funktioniert es aber nur selten mit Bildern über 1MB, wenn ich es teste... Jetzt kam endlich mal ne Fehlermeldung:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 12288 bytes) in C:\xampp\htdocs\test\admin_upload.php on line 142

So, damit kann ich persönlich nicht viel anfangen, hier ein Ausschnitt aus dem Quelltext:

PHP:
if(($_FILES["datei"]["size"] > 0) AND ($_FILES["datei"]["size"] <= $_HIGHDEF_FILESIZE) AND ($damnx<=0)) //highdef-filesize=4194304, damnx=0
    {
      if(($_FILES["datei"]["type"]=="image/gif") OR ($_FILES["datei"]["type"]=="image/jpeg") OR ($_FILES["datei"]["type"]=="image/pjpeg") OR ($_FILES["datei"]["type"]=="image/jpg") OR ($_FILES["datei"]["type"]=="image/pjpg"))
      {
        $size=getimagesize($_FILES["datei"]["tmp_name"]);
        $altebreite=$size[0];
        $altehoehe=$size[1];
        if($altebreite>$_HIGHDEF_PICWIDTH) //picwidth=definierte maximalbreite
        {
          $neuebreite=$_HIGHDEF_PICWIDTH;
          $neuehoehe=intval($altehoehe*$neuebreite/$altebreite);
          $altebreite=$neuebreite;
          $altehoehe=$neuehoehe;
        }
        if($altehoehe>$_HIGHDEF_PICHEIGH) //picheigh(t)=definierte maximalhöhe
        {
          $neuehoehe=$_HIGHDEF_PICHEIGH;
          $neuebreite=intval($altebreite*$neuehoehe/$altehoehe);
          $altebreite=$neuebreite;
          $altehoehe=$neuehoehe;
        }

        $uploadedbild=ImageCreateFromJPEG($_FILES["datei"]["tmp_name"]); //Line 142 
        $bild=imagecreatetruecolor($altebreite,$altehoehe);
        ImageCopyResized($bild,$uploadedbild,0,0,0,0,$altebreite,$altehoehe,$size[0],$size[1]);
        if(ImageJPEG($bild, "src/".$_FILES["datei"]["name"])) { 
          $grb1=filesize("src/".$_FILES["datei"]["name"]); }

Wäre cool, wenn jemand hier einen Tipp hätte, ich habe keine Ahnung, was ich anders machen soll...
 
Du hast zuwenig Arbeitsspeicher um den Prozess auszuführen.
Das liegt daran, dass PHP nur mit unkomprimierten Bildern arbeiten kann und nicht direkt mit den jpg Dateien. Deshalb verbraucht er um einiges mehr Speicher als das Bild groß ist.

Als Test könntest du das betreffende Bild einfach mal in Paint öffnen und als bmp abspeichern. Das sollte dann die ungefähre Größe sein, mit der PHP da zu kämpfen hat.

Die Lösung ist PHP mehr Arbeitsspeicher einzuräumen oder die Bilder bereits lokal zu verkleinern.
 
hmm, das lokale verkleinern wurde ich der benutzerfreundlichkeit wegen vermeiden... wie kann ich den arbeitsspeicher vergrößern
 
Zurück