Autor Zpráva
benett
Profil
Napsal jsem funkci, která získává data z 5 stránek. Každá stránka obsahuje několik tisíc odkazů, jejichž obsah potom parsuju. Když spustím skript pro 1 stránku, vše proběhne, jak má. Pokud ale chci udělat celou úlohu najednou, dojde k "Internal Server Error".
Vypadá to, že funkce file_get_contents zapisuje do paměti po celou dobu běhu skriptu, aniž by mazala jakákoliv předchozí data.
Lze tento problém nějak vyřešit? Nebo mám použít nějakou jinou funkci jako fopen/curl...?
Nox
Profil
No zapisuje, spíš to najednou celé přečte a dá do proměnné (paměti)

Pokud pracuješ s velkýma souborama, pak je vhodné - jak píšeš - to zpracovávat postupně

Pokud se koukneš do manuálu - máš tam parametry offset a length, ty by šly použít
(je pravděpodobné že fopen atd. budou o něco výkonově efektivnější, ale možná ne o dost aby to obhájilo
menší eleganci)

Edit:
Koukám že "Seeking (offset) is not supported with remote files."

Takže asi něco vlastního, nebo se mrknout jestli to nepůjde přes streamy
Darker
Profil
Nox:
Koukám že "Seeking (offset) is not supported with remote files."
Ale jde to jinak, pomocí socketovacích funkcí se k tomu taky dostaneš po kouskách.
Davex
Profil
Mělo by stačit zpracování po menších kusech v jednoduchém cyklu bez seeku:

if ($fr = fopen($url, 'r')) {
  while (!feof($fr)) {
    $chunk = fread($fr, 10000);
    // zpracování
  }
  fclose($fr);
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0