Du bist nicht angemeldet.

  • »scriptedSheep« ist der Autor dieses Themas

Beiträge: 799

Wohnort: Berlin

Beruf: Student, Freelancer

  • Private Nachricht senden

1

Freitag, 25. März 2011, 22:20

PHP, externe Hosts und das gute alte RAM-Limit

Hallo Leute,

ich habe mir ein kleines PHP-Script geschrieben, dass mehrere Feeds nimmt, diese parst und gewisse Inhalte dann in eine Datenbank schreibt. Blöderweise kann ich das momentan nur auf meinem eigenen Webserver laufen lassen, der kommt von 1&1. Anscheinend frisst das ganze aber etwas zu viel RAM, so das das Script irgendwann vom Server anscheinend beendet wird (automatisch, ich bekomme auch keine Exception oder sonstiges).
Nun habe ich also etwas rumgespielt und bin dabei über

Quellcode

1
unset($parser)


gestolpert (der Parser ist samt den Datenbank-Methoden zum schreiben bzw. updaten in eine eigene Klasse ausgelagert, von der ich dann in einer foreach-Schleife mehrere Instanzen erstelle und diesen dann per Methodenaufruf den Befehl gebe, ihrer Aufgabe nachzugehen). Eigentlich war es von mir so gedacht, dass ich dann, wenn der Feed geparst und in die Datenbank geschrieben wurde, ich das Objekt einfach release und somit den Speicher wieder frei mache für das nächste Objekt und so weiter und so fort. Ich habe meine Methoden an sich auch überprüft, da läuft alles (ich habe das getestet, indem ich die Anzahl der geparsten Feed-Items begrenze auf eine vergleichsweise kleine Anzahl, dann läuft alles so durch wie ich es mir gedacht habe, ich will aber halt alle Items und nicht nur die ersten 10...)
So nun meine eigentliche Frage:

Wie kann ich den RAM wieder freigeben? Also wie entlasse ich ein Objekt richtig, damit auch wirklich alle Refrenzen und Co., was das Objekt halt so hatte, endgültig gelöscht werden und ich demnach wieder den Speicherplatz von neuem füllen kann?
Ich hoffe ihr könnt mir helfen, das wäre echt wichtig!
Viele Grüße
scriptedSheep

2

Samstag, 17. März 2012, 22:10

Die meisten (alle?) Provider haben Laufzeitbegrenzungen für Scriptsprachen. Z.B. 30 sec pro *.php-Script. Das kannst du umgehen indem du ein 'Ladescript' hast, das die payload an ein 'Parserscript' übergibt. Dieses ruft nach erfolgtem Parsing wieder das Ladescript auf ... Wer das Datum lesen kann, ist klar im Vorteil ;)
MfG, blue

3

Samstag, 17. März 2012, 22:49

Ein Versuch wäre

Quellcode

1
2
ignore_user_abort(true);
set_time_limit(0);
wert :)

Aber vorsicht ! Eine Schleife läuft damit auch ewig bzw. bis andere Limits erreicht sind.
_____________________________
Alle Angaben ohne Gewähr :)

Zitat

On the internet you can be anything you want. It's strange that so many people choose to be stupid.


Superbientem animus prosternet

Beiträge: 339

Wohnort: Thüringen

Beruf: arbeitsam

Hobbys: mein iMac, Mountainbiking, Fotografieren

  • Private Nachricht senden

4

Samstag, 17. März 2012, 23:10

ich glaube nach einem Jahr hat er sich bestimmt die Frage selbst beantwortet :D
[window close]

5

Sonntag, 18. März 2012, 02:36

Sag' ich doch (Kopf-an-die-Wand-hau)!
MfG, blue

6

Sonntag, 18. März 2012, 03:41

huch - hab nicht darauf geachtet da vor mir bereits jemand geantwortet hat :)
_____________________________
Alle Angaben ohne Gewähr :)

Zitat

On the internet you can be anything you want. It's strange that so many people choose to be stupid.


Superbientem animus prosternet

Verwendete Tags

PHP

Social Bookmarks