php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 09-01-2009, 14:00
Pust
 Registrierter Benutzer
Links : Onlinestatus : Pust ist offline
Registriert seit: Feb 2008
Beiträge: 93
Pust ist zur Zeit noch ein unbeschriebenes Blatt
Standard Fatal error: Allowed memory size of ... übliche Fehler ausgeschlossen

Hallo Forum,

ich habe folgende Fehlermeldung lokal:

PHP-Code:
Fatal errorAllowed memory size of 33554432 bytes exhausted (tried to allocate 12096 bytesin C:.... 
Dabei geht es um einen Bildupload. Die relevante Zeile:

PHP-Code:
 $new_picture_kl  imagecreatetruecolor($breite_neu$hoehe_neu); 
Nach einigem Suchen und Googlen und rumtesten habe ich folgendes getan, um zu debuggen:

-in der .ini den erlaubten Speicher auf zuerst 32M erhöht, dann auf 40M
-Schleifen überprüft - es gibt weder FOR noch WHILE noch sonstige Schleifen, die irgendwas endloses produzieren könnten im Quelltext
-das Bild, das ich hochlade ist ein RGB-JPG mit 960KB (ein kleineres mit 150 KB funktioniert) Selbst wenn ich die Pixelmaße ausrechne, komme ich nur auf 17MB, die das Bild belegen sollte...
-Der Clou: Auf zwei verschiedenen Servern bei zwei unterschiedlichen Anbietern funktioniert es problemlos. Die PHPInfo für den einen Server sagt mir ein Limit von 40M. Auch diese 40MB funktionieren nicht lokal.
-Ich verwende hier Windows (3 Gig RAM) und XAMPP

Es muß also irgendwie an den Einstellungen auf meinem Rechner, bzw. XAMPP, PHPini liegen, oder?

Hat jemand einen Tipp?

Danke schonmal und Grüße,
Pust

EDIT:
Ach ja, um es gleich vorweg zu nehmen: Ich habe zum Testen das Script auf ein Minimum reduziert, es ist nur noch das upload-Form drin und die Bildoperationen sonst nichts.
Mit Zitat antworten
  #2 (permalink)  
Alt 09-01-2009, 14:21
lennart
 PHP Junior
Links : Onlinestatus : lennart ist offline
Registriert seit: May 2007
Ort: Hamburg
Beiträge: 565
lennart ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OffTopic:
Wer hätte gedacht hier nochmal einen so vorbidlich vorbereiteten Post zu sehen


Weiter helfen kann ich dir aber leider nicht.
Mit Zitat antworten
  #3 (permalink)  
Alt 09-01-2009, 14:31
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Allowed memory size of 33554432 bytes exhausted
Das sind aber noch keine 40 MB. Webserver neu gestartet? Richtige INI-Datei?
Mit Zitat antworten
  #4 (permalink)  
Alt 09-01-2009, 14:49
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Du redest über 2 Bilder!
2*17 ist?

Breite Höhe und Anzahl der Bilder wäre interessant zu wissen.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #5 (permalink)  
Alt 09-01-2009, 15:01
Pust
 Registrierter Benutzer
Links : Onlinestatus : Pust ist offline
Registriert seit: Feb 2008
Beiträge: 93
Pust ist zur Zeit noch ein unbeschriebenes Blatt
Standard

AAaaaalso:

Zitat:
Das sind aber noch keine 40 MB. Webserver neu gestartet? Richtige INI-Datei?
Das war noch die Fehlermeldung, bevor ich auf den Server geschaut hatte, was angegeben war und ich es dann entsprechend abgeändert habe. Aber selbst 32 sollten ja dicke reichen...

Zitat:
Du redest über 2 Bilder! 2*17 ist? Breite Höhe und Anzahl der Bilder wäre interessant zu wissen.
Immer nur ein Bild im Script. Also 2 Versuche. Nacheinander hochgeladen halt:

Bild 1: JPG, RGB 60.137 Bytes, 600x900px. Pixelmaße *3 (RGB) = 1,54MB

Geht problemlos. Auch nach dem fehlgeschlagenen Hochladen des anderen Bildes noch.

Bild 2: JPG, RGB 1.043.029 Bytes, 3024 x 1899 px. Pixelmaße: 16,4MB
Mit Zitat antworten
  #6 (permalink)  
Alt 09-01-2009, 15:06
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Nein!
Du abeitest jeweils mit 2 Bildern!!
1. das hochgeladene
2. das per imagecreatetruecolor() erzeugte

Auch ist deine Formel zu optimistisch!
Bytes = x*y*5+y*30
Ist deutlich näher dran.
__________________
Wir werden alle sterben

Geändert von combie (09-01-2009 um 15:09 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 09-01-2009, 15:13
Pust
 Registrierter Benutzer
Links : Onlinestatus : Pust ist offline
Registriert seit: Feb 2008
Beiträge: 93
Pust ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Combie Du hast sicher recht. Ich hab mal auf 50, dann auf 60, dann auf 100 MB erhöht. Bei 100 geht es dann.

Nur: Warum funzt es dann auf dem Server mit den 40M ? Erlaubt der mehr, als er anzeigt?

Kannst Du mir die Formel näher erläutern?

x*y*5+y*30


Danke und Grüße,
Pust
Mit Zitat antworten
  #8 (permalink)  
Alt 09-01-2009, 15:51
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von Pust

Kannst Du mir die Formel näher erläutern?
x*y*5+y*30
Nicht wirklich. Aber hier habe ich mal was dazu geschrieben:
http://phpforum.de/forum/showthread.php?t=222506

Und einen Fetzen Testcode kann ich dir auch geben:
(und wie man sieht, liegt meine Formel auch nicht besonders gut in Spur)
PHP-Code:
<?php
error_reporting
(E_ALL|E_STRICT); 
ini_set('display_errors'TRUE); 

function 
real($x,$y)
{
  
$start memory_get_usage();
  
$im imagecreatetruecolor($x,$y); // bild erzeugen
  
$end memory_get_usage();
  
imagedestroy($im); // zerstören
  
return $end $start;
}

function 
formel($x,$y)
{
    return 
$x*$y*5+$y*30;
 
//   return 8192 + $x*$y*5+$y*24;
}

function 
ausgabe($x,$y)
{
  
$abweichung formel($x,$y) - real($x,$y);
  echo 
"X: $x   Y: $y   Abweichung: $abweichung <br>";
}


///----------------



$maxx 1000;
$maxy 1000;
$step 100;


// einen zum warmlaufen
real($maxx,$maxy);


for(
$x=$step;$x<=$maxx;$x+=$step)
  for(
$y=0;$y<=$maxy;ausgabe($x,$y+=$step));


?>
__________________
Wir werden alle sterben

Geändert von combie (09-01-2009 um 15:59 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 09-01-2009, 20:19
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Nur mal so als Ergänzung: Es gibt eine Methode, um den Speicherplatzbedarft genau herauszubekommen (berechnen kann man das nicht nennen). Wenn man das Bild irgendwie in eine Image-Resource bekommen hat, kann man es im "gd-Format" speichern. Die Dateigröße sollte der Größe des belegten Speichers ziemlich nahe kommen.

@OP:

Zitat:
-Schleifen überprüft - es gibt weder FOR noch WHILE noch sonstige Schleifen, die irgendwas endloses produzieren könnten im Quelltext
Ohne Blick in den Quelltext kann man da nur Vermutungen anstellen. Grundsätzlich sind Schleifen nicht speicherfressender als andere Programmablaufkonstrukte.

Zitat:
(...)
-Der Clou: Auf zwei verschiedenen Servern bei zwei unterschiedlichen Anbietern funktioniert es problemlos. Die PHPInfo für den einen Server sagt mir ein Limit von 40M. Auch diese 40MB funktionieren nicht lokal.
Was den Verdacht nährt, dass auf dem System, wo es nicht funktioniert, noch etwas Zusätzliches ausgeführt, eingebunden oder wie auch immer in den Speicher geladen wird.
Zitat:
-Ich verwende hier Windows (3 Gig RAM) und XAMPP
Für moderne Windows-Versionen gibts den Processexplorer von Sysinternals/M$FT, der stellt nicht nur die laufenden Prozesse übersichtlich dar, sondern gibt auch Auskunft über den wirklichen Speicherverbrauch. Wenn PHP als Servermodul läuft, findest du den passenden Prozess unter "Apache.exe" oder "httpd.exe".
Mit Zitat antworten
  #10 (permalink)  
Alt 12-01-2009, 16:27
Pust
 Registrierter Benutzer
Links : Onlinestatus : Pust ist offline
Registriert seit: Feb 2008
Beiträge: 93
Pust ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke an alle erstmal. Bei Gelegenheit schau ich mir den Speicherverbrauch noch näher an. Vorerst nehme ich einfach mal in Kauf, daß es eben etwas mehr braucht, als nur einfach h*b*rgb.

Das mit den Schleifen hab ich nicht geschrieben, weil ich denke, daß die besonders viel Speicher brauchen, sondern nur um klar zu machen, daß ich nicht irgendwas aus Versehen mit einer Endlosschleife zugemüllt habe. Die Speicherfresser liegen ja meist zwischen { und } ;-)
Mit Zitat antworten
  #11 (permalink)  
Alt 12-01-2009, 16:38
Pust
 Registrierter Benutzer
Links : Onlinestatus : Pust ist offline
Registriert seit: Feb 2008
Beiträge: 93
Pust ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hey Combie, hab mir gerade mal Deinen Link durchgeschaut.

Das Fazit scheint zu sein, daß kein Mensch wirklich weiß, wie Größe bei der Dateioperation wirklich zustande kommt, oder?

Kann man da niemanden Fragen? Irgendein Institut oder sowas wird das doch wohl mal gebaut/erfunden/programmiert/entwickelt haben?

Naja, um ehrlich zu sein, so wichtig ist es mir dann auch wieder nicht, hauptsache das Script funzt!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:40 Uhr.