PHP Simple HTML Dom-Speicher-Problem
Ich bin in Speicherprobleme mit PHP Simple HTML DOM Parser. Ich bin Parsen ein mittlerer doc-und müssen sich im DOM-Baum...
1)ich fange mit der ganzen Datei:
$html = file_get_html($file);
2)dann analysieren aus meiner Tabelle:
$table = $html->find('table.big');
3)dann analysieren aus meinen Zeilen:
$rows = $table[0]->find('tr');
Was ich bin am Ende mit drei RIESIGEN Objekten... weiss jemand, wie man dump ein Objekt, nachdem ich analysiert es für die Daten, die ich brauche? Wie $html ist nutzlos, Schritt 3, doch, es ist die größte aller Objekte.
Irgendwelche Ideen?
Gibt es eine Möglichkeit, einen Drilldown zu meiner Tabelle Zeilen aus dem ursprünglichen $html Objekt?
Vielen Dank im Voraus.
EDIT:
Ich es geschafft haben, überspringen Sie Schritt zwei mit:
$rows = $this->html->find('table.big tr');
Aber ich bin immer noch in Speicherprobleme...
- Wie bereits erwähnt, durch Aakash Sahai verwenden Sie die clear(). Ohne mein script nutzen würden, um 140MB ram, mit nur 1,3 MB!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn der Speicher wirklich ein großes Anliegen, möchten Sie vielleicht zu schauen in SAX anstelle der Verwendung von DOM. Sie möchten möglicherweise versuchen Sie es
unset()
auf die$html
nach Erhalt$table
, aber das ist einfach nur eine Kennzeichnung zu sein, garbage Collection und memory nicht freigegeben werden sofort.Am Ende des Tages, es ist wirklich bis Sie, wie Speicher-effiziente Simple HTML DOM geschrieben ist oder die Umsetzung, die Sie gewählt haben.
Ich bin vielleicht etwas spät...zu beantworten, als ich zu spät...also die Antworten oben sind nicht korrekt. unset nur entfernt den $html nicht seine Eigenschaften. So zu bereinigen Speicher und kick-off der Speicher-Problem ist :
verwenden
$html->clear();
.Ich denke, u didint Lesen Sie der Klasse code, bevor Sie es. clear () - Funktion zerstören/den Speicher freizugeben, aufgezehrt von den $html-Objekt.Diese Funktion ist die interne Funktion von simple_html_dom.Diese Funktion sofort wirksam. So u dont müssen warten, ganzen Tag oder Beendigung des Programms wirksam werden.
Können Sie erhöhen den Arbeitsspeicher begrenzt.
oder deaktivieren Sie den Speicher mit diesem code
$html->__destruct()
würde einen Fehler auslösen, da$html
ist nicht ein Objekt, nicht mehr.$html->__destruct()
nach Sie habenunset($html);
. Dass das falsch war. Sie haben sich seitdem geändert es. Die einfachste Methode wäre einfach anrufen$html->clear();
wie diese Methode wurde geschrieben von der Klasse developer behandeln genau dieses Problem (wie erwähnt, in der Entwicklung der eigenen Gemeinschaft).unset($html)
?oder
$html = null;
besser laufen könnte - eher einen unmittelbaren Einfluss auf?