[Fatal error: Out of memory]

Pozdravljeni!

Zanima me, če lahko znotraj dokumenta nastavim memory limit ali moram stvar urejati preko strežnika? Probal sem z:

ini_set("memory_limit","512M");

a še vedno vrača napako: Fatal error: Out of memory (allocated 67633152) (tried to allocate 42 bytes) in...

Hvala za odgovore!

12 odgovorov

Hm.. ne razumem tega garbage collecterja, sem gledal google, celo na (http://www.wicked.si/) sem zasledil objavo, ampak še zdaj ne dojamem tega principa.. So baje tudi neke nove funkcije v php5. Torej.. ta skripta se izvaja dokler ne "porabi" memory limit-a, če ga povečam za ene par ničl, dobim po par urcah takšno napako (google chrome):

Ta spletna stran ni na voljo.

Spletna stran na naslovu http://kontakt.si/parsanje/parsanje.php morda začasno ne deluje ali pa je trajno premaknjena na novi spletni naslov.

Več informacij o tej napaki
V nadaljevanju je prvotno sporočilo o napaki

Napaka 324 (net::ERREMPTYRESPONSE): Neznana napaka.

Za vse, ki ste pripravljeni pomagat, uporabljam simple html dom parser, spodaj je koda (spletna stran načeloma ni pomembna). Spremenljivke ($var1,2,3..6) vrnejo izključno besedilo, brez kakšnih znakov, pa še to besedilo je dokaj kratko.

set_time_limit(60*60);
ini_set("memory_limit","64M"); // 64+
ini_set('error_reporting', E_ALL);

$url = 'url';
$begin = 40;
$end = 381;

header('Content-Type: text/html; charset=utf-8');
include("simple_html_dom.php");
$html = new simple_html_dom();

$html = file_get_html($url);
foreach($html->find('a') as $id => $element) {
    if ($id > $begin && $id < $end) {
        $html = file_get_html($element->href);
        foreach($html->find('ul.ProductList  a[class=]') as $id => $e) {
            $var1 = $var2 = $var3 = $var4 = $var5 = $var6 = '';

            $html = file_get_html($e->href);
            foreach($html->find('div.BlockContent h2') as $e) {
                $var1 .= $e->innertext;
            }

            foreach($html->find('div.Value strike') as $e) {
                $var2 .= $e->innertext;
            }

            foreach($html->find('em.ProductPrice') as $e) {
                $var3 .= $e->innertext;
            }

            foreach($html->find('span.YouSaveAmount') as $e) {
                $var4 .= $e->innertext;
            }

            foreach($html->find('div.Value a') as $id => $e) {
                $var5 .= str_replace('Buy in bulk and save', '', strip_tags($e->innertext));
            }

            foreach($html->find('div.ProductDescriptionContainer') as $e) {
                $var6 .= strip_tags($e->innertext, '');
            }

            echo $var1."<br>\n";
            echo $var2."<br>\n";
            echo $var3."<br>\n";
            echo $var4."<br>\n";
            echo $var5."<br>\n";
            echo $var6."<br>\n";
            echo "<hr>";
        }
    }
}

Sedaj me pa zanima, kako bi lahko skripto "omejil", npr. da se po določenih izpisih vsavi shrani tekst in od tam dalje spet procesira, spet vstavi, shrani.. spet procesira.. in tako do konca, da bi na koncu dobil vse izpise. Btw. parsa najprej iz ene strani, nato iz te strani sparsa linke, gre na vsako stran od teh linkov in sparsa vsebino.

Najlepša hvala za odgovore in lep pozdrav, Jure!

Tole ti fali

$html = filegethtml(...);
// do something...
$html->clear();
unset($html);

http://simplehtmldom.sourceforge.net/manual_faq.htm