php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.04.2005, 17:39  
Erfahrener Benutzer
 
Registriert seit: 25.01.2004
Beiträge: 239
bicpi
Standard Allowed Memory Size exhausted

Hi, habe einen Bilderupload mit automatischer Verkleinerung gebastelt und habe nun folgendes Problem:
Bilder ab ca 190kB werden mit der Fehlermeldung:
Code:
Fatal Error: Allowed Memory Size of 8388608 Bytes exhausted (tried to allocate 6400 Bytes)
quitiert.
Das ist natürlich vor allem bei Bilder von Digi-Kams ein Problem die sind ja immer so groß.
In meiner php.ini ist 2M als Limit angegeben und da freage ich mich was die 8er Byte-Zahl in der Fehlermeldung zu bedeuten hat, nach meiner rechnung ergeben das gut 8MB. Also was stimmt denn hier nicht? Meint das den Arbeitsspeicher? Der ist ja pro Script auf 8M beschränkt.
An der execution time kanns übrigens auch nicht liegen, die ist bei weitem nicht erreicht.

Jemand einen Tipp??
Danke
__________________
Viele Grüße
bicpi ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.04.2005, 17:44  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

dein script hat bereits die 8 MB belebt und wollte weitere 6400 bytes haben und das ist weil eben das speicherlimit deines php's auf 8 MB limitiert ist nicht möglich.

mfg
robo47
robo47 ist offline   Mit Zitat antworten
Alt 19.04.2005, 17:46  
Erfahrener Benutzer
 
Registriert seit: 25.01.2004
Beiträge: 239
bicpi
Standard

Also ist das tatsächlich der Arbeitsspeicher und es hilft nur, zu große Bilder vorher auszutesten und abzulehnen, ne?
__________________
Viele Grüße
bicpi ist offline   Mit Zitat antworten
Alt 19.04.2005, 18:02  
Erfahrener Benutzer
 
Registriert seit: 14.01.2004
Beiträge: 2.543
fantast
fantast eine Nachricht über ICQ schicken
Standard

oder eben dieses limit hochzusetzen. meins is bei 32M. da schafft er auch noch 2M bilder... soviel speicher wriste ja noch uebrig haben
__________________
Was ist validität?
fantast ist offline   Mit Zitat antworten
Alt 19.04.2005, 18:02  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

naja du kannst nicht sagen ein 2MB-bild ist unbedingt zu groß :P das ist das prob, aber zeig mal deinen code vieleicht lässt isch ja was optimieren
robo47 ist offline   Mit Zitat antworten
Alt 19.04.2005, 18:09  
Erfahrener Benutzer
 
Registriert seit: 25.01.2004
Beiträge: 239
bicpi
Standard

Also Du meinst es liegt an der Verkleinerungsopration?
Betroffen sind schon Bilder ab 190kB soweit ich das austesten konnte.

Hier der Code:

Code:
  public function scaleDownImage($src, $width_limit, $height_limit){
    $img_data = getimagesize($src);
    $types    = array(1=>'gif', 'jpeg', 'png');
    $type     = $types[$img_data[2]];	
    if($img_data[0] > $width_limit){
      eval('$im = imagecreatefrom' . $type . '($src);');
      $new_image_width  = $width_limit;
      $new_image_height = floor(($img_data[1] * $width_limit) / $img_data[0]);
      $new_image        = imagecreatetruecolor($new_image_width, $new_image_height);
      imagecopyresized($new_image, $im, 0, 0, 0, 0, $new_image_width, $new_image_height, $img_data[0], $img_data[1]);
      eval('image' . $type . '($new_image, $src);');
      $img_data[0]  = $new_image_width;
      $img_data[1]  = $new_image_height;
    }
    if($img_data[1] > $height_limit){
      eval('$im = imagecreatefrom' . $type . '($src);');
      $new_image_height = $height_limit;
      $new_image_width  = floor(($img_data[0] * $height_limit) / $img_data[1]);
      $new_image        = imagecreatetruecolor($new_image_width, $new_image_height);
      imagecopyresized($new_image, $im, 0, 0, 0, 0, $new_image_width, $new_image_height, $img_data[0], $img_data[1]);
      eval('image' . $type . '($new_image, $src);');
    }
  }
//EDIT:
Dass Hochsetzten wäre natürlich auch ne feine Sache
Schreibe allerdings an einem kleinen Büchlein und das wäre als Tipp ja nicht gerade toll, das Hochsetzten zu vorauszusetzten
Aber bei mir werd ich das auf jeden Fall machen.
__________________
Viele Grüße
bicpi ist offline   Mit Zitat antworten
Alt 19.04.2005, 18:18  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

also 1 trick wäre schonmal bilder die du nicht mehr brauchst zu löschen:

imagedestroy()
Zitat:
ImageDestroy() gibt den durch das Bild im belegten Speicher wieder frei. Im ist der Bezeichner, der ihnen beim Aufruf der Funktion ImageCreate() zurück gegeben worden ist.
2. hmm mal schauen das eval lieber durch ein if-konstrukt zu ersetzen gibt ja nicht so viele bildtypen, abgesehen davon weis ich nciht wie das thema speicherverbrauch bei eval ist, was das selbst nochmal verbraucht.
desweiteren vieleicht mla bissel debuggen, mit etwas glück läuft bei dir
memory_get_usage() dann kannst du den speicherverbrauch abfragen und mal schauen ob vieleicht vor dem aufruf schon viel belegt ist und du vorher irgendwo speicher sparen kannst.

mfg
robo47
robo47 ist offline   Mit Zitat antworten
Alt 19.04.2005, 18:59  
Erfahrener Benutzer
 
Registriert seit: 25.01.2004
Beiträge: 239
bicpi
Standard

ich habs nu einfach auf auf 32M gesetzt jetzt gibts kein Problem mehr uns ich hoffe nicht, dass 30 user gleichzeitig Photos hochladen werden, hihi.
imagedestroy kannte ich noch gar nicht, hab ich auf jeden Fall eingebaut
memory_get_usage werd ich mir auch noch anschauen.

Danke für die Tipps, bin nu wieder glücklich für ein paar Stunden
__________________
Viele Grüße
bicpi ist offline   Mit Zitat antworten
Alt 19.04.2005, 21:01  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

webspace? eigener server? oder was?
schau dir vieleicht mal imagemagick an, das ist glaub ich etwas performanter, direkt über die shell auszuführen und ist speichermäßig undabhängig von php
robo47 ist offline   Mit Zitat antworten
Alt 19.04.2005, 21:21  
Erfahrener Benutzer
 
Registriert seit: 25.01.2004
Beiträge: 239
bicpi
Standard

eigener Server
da kann man sowas machen, hihi
__________________
Viele Grüße
bicpi ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
Memory exhausted PHP Tipps 2005-2 2 29.08.2005 19:47
[Erledigt] Fatal error: Allowed memory size... PHP Tipps 2005-2 5 07.07.2005 13:01
different size in shared object, consider re-linking!? Heart Datenbanken 1 09.03.2005 15:42
Fatal error: Allowed memory size of 8192 bytes exhausted at PHP Tipps 2005 11 06.03.2005 19:26
[Erledigt] imagecreatetruecolor memory size PHP-Fortgeschrittene 2 10.09.2004 17:52
Fatal error: Allowed memory size of PHP Tipps 2004 4 04.09.2004 17:50
[Erledigt] Memory Problem mit gd PHP-Fortgeschrittene 1 25.06.2004 18:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php memory size, php memory size exhausted, php allowed memory size exhausted, php speicher sparen, php allowed memory size, php allowed memory size abfangen, doctrine allowed memory size, php allowed memory size exhausted abfangen, doctrine allowed memory size exhausted, http://www.php.de/php-fortgeschrittene/21527-allowed-memory-size-exhausted.html, php memorysize, php memory exhausted abfangen, php fatal error: allowed memory size ofexhausted, php eval fatal error: allowed memory size of, time exhausted php, memory ram abfragen php, allowed memory size exhausted php, allowed memory size of exhausted php, php allowed memory size exchausted arbeitsspeicher leeren, php debug memory exhausted

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:30 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.