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 28-08-2007, 14:31
odi_de
 Newbie
Links : Onlinestatus : odi_de ist offline
Registriert seit: Apr 2007
Beiträge: 13
odi_de ist zur Zeit noch ein unbeschriebenes Blatt
Standard allowed memory error trotz 1024MB RAM

Hallo allerseits,

habe da ein Problem mit einem Parsingskript, das XML Dateien auslesen soll und externe Bilder kleinrechnen soll. Jetzt ist das ganze so programmiert, dass bei riesigen XML Dateien das Skript nach 50 Datensätzen sich neu lädt, in einer foreach Schleife dann wieder den Anschluss in der XML Datei sucht und weiter macht usw. . Dabei werden die Daten immer in die DB geschrieben und zugehörige Bilder kleingerechnet.

Das Problem:

Das Skript hat ein riesen XML-Skript zu bewältigen mit 800 Datensätzen samt bildern, er lädt alle 50 Datensätze neu und sucht den Anschluss. Zu große Bilder werden übergangen. Ziemlich genau bei der Hälfte bleibt er hängen und zeigt:

Fatal error: Allowed memory size of 12582912 bytes exhausted (tried to allocate 5168 bytes)

Habe aber einen Server mit 1024 MB Arbeitsspeicher!
Noch dazu wird das Skript alle 50 Datensätze neu geladen.
Es kann auch keinen Laufzeiterror geben (der ist auf 10Min. eingestellt).

Die Frage:

Woran kann das liegen? Scheinbar überlastet ihn die foreach schleife, die eventuell einige hundert male durchlaufen wird, bis der Anschlussdatensatz gefunden wird:

foreach($xml2->anbieter->immobilie as $immo){
$datei_zaehler = $datei_zaehler +1 ;
if(!$datensatz_zaehler){ $datensatz_zaehler = 1; }
if($durchgang_zaehler == 51){
echo "<script language ='JavaScript'>location.href='parsing_neuladen.php5?datensatz_zaehler=$datensatz_zaehler';</script>"; }else{}
}

Kann so eine Schleife zu diesem Abbruch führen? Was kann ich tun, um rauszufinden, warum das abbricht?

Danke für jede Hilfe,
Michael
Mit Zitat antworten
  #2 (permalink)  
Alt 28-08-2007, 14:37
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Habe aber einen Server mit 1024 MB Arbeitsspeicher!
Und wenn du 160 TByte hättest würde es keinen Unterschied machen, solange du php nicht das Recht gibst eine entsprechende Menge Speicher in Beschlag zu nehmen.
Momentan scheinst du als Limit 12 MByte zu haben. Mal die php.ini öffnen und den entsprechenden Wert ändern, speichern und Apache neustarten.

Gruss

tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #3 (permalink)  
Alt 28-08-2007, 14:40
odi_de
 Newbie
Links : Onlinestatus : odi_de ist offline
Registriert seit: Apr 2007
Beiträge: 13
odi_de ist zur Zeit noch ein unbeschriebenes Blatt
Standard Doch das ist der PHP RAM

Doch, dieser Arbeitsspeicher ist für PHP Anwendungen:

php_admin_value memory_limit 1024M ! Oder?
Mit Zitat antworten
  #4 (permalink)  
Alt 28-08-2007, 14:43
Bugbuster
 PHP Junior
Links : Onlinestatus : Bugbuster ist offline
Registriert seit: Mar 2003
Ort: Hamm
Beiträge: 658
Bugbuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

wohl eher so:

memory_limit = 16M ; Maximum amount of memory a script may consume (16MB)

bzw. 1024M

danach den serverdienst durchstarten.
__________________
tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
documentation: php.net mysql.com framework.zend.com

Die Nachtwache!
Mit Zitat antworten
  #5 (permalink)  
Alt 28-08-2007, 14:44
odi_de
 Newbie
Links : Onlinestatus : odi_de ist offline
Registriert seit: Apr 2007
Beiträge: 13
odi_de ist zur Zeit noch ein unbeschriebenes Blatt
Standard Nochwas

Nochwas: Hab auch versucht riesen Bilder mit 2 MB hochzuladen und kleinzurechnen und as funktioniert! Also der Arbeitsspeicher an sich greift schon!
Mit Zitat antworten
  #6 (permalink)  
Alt 28-08-2007, 14:52
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Da steht
Zitat:
Allowed memory size of 12582912 bytes exhausted
und das sind 12 MB.
Ändere die Einstellung, php_info() zur Kontrolle, und gut ist.
Mit Zitat antworten
  #7 (permalink)  
Alt 28-08-2007, 14:57
Bugbuster
 PHP Junior
Links : Onlinestatus : Bugbuster ist offline
Registriert seit: Mar 2003
Ort: Hamm
Beiträge: 658
Bugbuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

php_admin_value?! in der php.ini? geht das? nein! diese deklaration wird in der httpd.conf oder htaccess verwendet.

__________________
tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
documentation: php.net mysql.com framework.zend.com

Die Nachtwache!
Mit Zitat antworten
  #8 (permalink)  
Alt 28-08-2007, 15:02
Hopka
 PHP Expert
Links : Onlinestatus : Hopka ist offline
Registriert seit: May 2003
Ort: Köln
Beiträge: 2.172
Hopka ist zur Zeit noch ein unbeschriebenes Blatt
Hopka eine Nachricht über ICQ schicken
Standard

Wie groß die Bilddateien sind, mit denen du es probiert hast, ist völlig egal. GD (ich gehe davon aus, dass du GD verwendest) dekomprimiert die Bilder beim öffnen. Und im RAM speichert es sie dann mit 8 Bit pro Kanal. Bei 3 Kanälen (Rot, Grün, Blau) ergibt das 3 Byte pro Pixel. Den Arbeitsspeicherbedarf eines Bildes kannst du also ausrechnen:

Breite des Bildes (in Pixeln) * Höhe des Bildes (in Pixeln) * 3 Byte

Und wenn das für ein Bild mehr als 12 MB wird, bricht dein Script ab. Allerdings hilft auch die brave Anwendung von image_destroy und ein bisschen Glück.
__________________
hopka.net!
Mit Zitat antworten
  #9 (permalink)  
Alt 28-08-2007, 18:58
odi_de
 Newbie
Links : Onlinestatus : odi_de ist offline
Registriert seit: Apr 2007
Beiträge: 13
odi_de ist zur Zeit noch ein unbeschriebenes Blatt
Standard Lösung

Hallo Allerseits,

danke, hab jetzt die Lösung:

also irgendwas ist da mit dem Script komisch. Das Script wird aus mir unbekannten Gründen anhand des MasterValues bewertet und nicht anhand des LocalValues in Bezug zu dem memory_limit.

Ich habe nun mal direkt in der php.ini das memory_limit auf 512M gestellt und siehe es läuft und läuft und läuft, danke an alle...

Michael
Mit Zitat antworten
  #10 (permalink)  
Alt 29-08-2007, 12:54
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:
Breite des Bildes (in Pixeln) * Höhe des Bildes (in Pixeln) * 3 Byte
Nein, meines bescheidenen Wissenes nach, sind es 4Byte pro Pixel, du hast den Alpha Kanal vergessen...
__________________
Wir werden alle sterben
Mit Zitat antworten
  #11 (permalink)  
Alt 29-08-2007, 19:59
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

das kommt alles auf das format an, aber das ist nicht das thema.
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

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:24 Uhr.