Autor | Zpráva | ||
---|---|---|---|
benett Profil |
#1 · Zasláno: 2. 11. 2011, 20:00:18
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 |
#2 · Zasláno: 2. 11. 2011, 20:06:21 · Upravil/a: Nox
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 |
#3 · Zasláno: 2. 11. 2011, 20:31:20
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 |
#4 · Zasláno: 2. 11. 2011, 22:04:19 · Upravil/a: Davex
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); } |
||
Časová prodleva: 12 let
|
0