J'essaie d'utiliser PHP Simple HTML Dom Parser pour analyser les informations de certains sites. Peu importe quoi et où. Mais il semble qu'il y ait un énorme problème de mémoire. J'ai réussi à réduire le code html à seulement 6kB, mais script qui trouve certains éléments et les enregistre dans la base de données prend même 700MB de ram et plus de 1GB de mémoire virtuelle ! J'ai lu quelque part que je devrais utiliser ->clear() pour libérer de la mémoire, mais il semble que ce ne soit pas le cas.
J'utilise str_get_html()
une fois et 5 fois en utilisant ->find()
en assignant le résultat à une variable.
$main_html = str_get_html($main_site);
$x = $main_html->find(...);
$y = $main_html->find(...);
etc.
J'ai essayé d'utiliser par exemple $y->clear()
après avoir utilisé $y mais j'obtiens une erreur PHP Fatal error: Call to a member function clear() on a non-object
même si $y
existe et if($y)
est vrai. Même foreach($y) echo $y->plaintext
retourne plaintext
de $y
.
De htop :
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
8839 username 20 0 1068M 638M 268 R 23.0 8.0 0:08.41 php myscript.php
Qu'est-ce qui ne va pas ?
Un test simple :
echo "(MEM:".memory_get_usage()."->";
$product = $p->find('a',0)->href;
echo memory_get_usage()."->";
unset($product);
$p->clear();
unset($p);
echo memory_get_usage().")";
Le résultat est :
(MEM:11865648->11866192->11865936)
Forme plus lisible :
11865648->
11866192-> (+544 in total)
11865936 (+288 in total)
Bien sûr, je ne peux pas utiliser $product->clear() car il est dit que PHP Fatal error: Call to a member function clear() on a non-object