Autor Zpráva
Vox
Profil *
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 *
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).

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