Autor | Zpráva | ||
---|---|---|---|
Vox Profil * |
#1 · Zasláno: 4. 11. 2012, 19:03:08
Na hostingu mi může za ráz běžet pouze 5 procesů. Počítá se tam i stahování souboru, pokud na něj přesměruji z PHP scriptu pomocí Header Location?
|
||
Nox Profil |
Funkce header() jenom nastaví hlavičku, nic jiného. Pokud za ni dáš die/exit, pak skript hned skončí, jinak bude pokračovat jako by tam header nebyl a pak skončí (případně dokud nedosáhne max_execution_time, pokud nepoužiješ set_time_limit)
|
||
Jan K Profil * |
#3 · Zasláno: 5. 11. 2012, 23:05:36
to není tak pravda. Při poslání hlavičky header location (a samozřejmě vypnutém output buffering) prohlížeč ukončí současné načítání stránky a začne načítat novou stránku. PHP zase při ukončení (odpojení) prohlížeče se samo zabije, téhle sebevraždě lez zabránit např. funkcí ignore_user_abort, ale to je v tomhle případě nežádoucí.
Takže, ne, po odeslání hlavičky header location dojde k ukončení php běhu skriptu. |
||
Nox Profil |
Otestoval jsem to a není to tak (PHP 5.3.10, Opera 12). Header prostě jen nastaví hlavičky
// ob_get_level = 1 ob_end_clean(); // level = 0 header('Location: http://www.google.cz'); flush(); // ještě radši... echo "abcd"; // druhé projistotu file_put_contents('D:\yyy.txt', 'abc'); // ... a stejně soubor se skutečně vytvoří Edit: abych vyloučil lag mezi flushem a put_contents, upravil jsem ještě abych PHP zaměstnal na 10 vteřin, mraky času, stejně se přesměrovalo až na konci I když to co píšeš by dávalo smysl, pokud by se to potom flushlo, ale ať hraju s flushováním a vším jakkoli, nikdy se mi to nepřesměrovalo hned A ještě další věc - je hloupost spoléhat se, že skript ukončí prohlížeč. Než se flushne, doputují data do prohlížeče, pak zase signál o ukončení zpět, může být skript úplně někde jinde. Takže pokud chceme hned přesměrovat -> exit (případně throw + nějaké ukončení, jak to dělá Nette). |
||
Časová prodleva: 13 let
|
0