Nefunkční header() nebo cookies

Nefunkčnost header() (a podobně pracujících funkcí) má v drtivé většině případů na svědomí HTML výstup před voláním header(). Na problematiku upozorňuje také manuál PHP (http://php.net/header):

Pamatujte, že header() musí být voláno před jakýmkoliv výstupem, nevyjímaje prázdné řádky/mezery v souboru nebo zaslané z PHP. Často se zapomíná také na vkládané skripty (pomocí include() nebo require()), funkcemi atp.

Jak zjistím příčinu?

Použijte funkci error_reporting(). Následně by se mělo zobrazit podobné varování:

Warning: Cannot modify header information - headers already sent by (output started at /hosting/www/example.com/www/test.php:2) in /hosting/www/example.com/www/test.php on line 4

Chyba mimo jiné napovídá skript a číslo řádku, kde výstup započal.

Řešení

Vyvarujte se veškerému HTML výstupu před header() nebo jinými funkcemi pracujícími s hlavičkami (cookies apod.).

Pokud to není možné, použijte tzv. bufferování výstupu.

PsPad

Může jít i o problém vašeho FTP editoru. Jestliže používáte např. PsPad a objeví se Vám toto chybové hlášení, tedy chyba na prvnim řádku, může to znamenat, že editor použitý pro editaci souboru file.php voložil na začátek souboru netisknutelný znak.

PsPad je tedy třeba nastavit tak, aby tento netisknutelný znak nevkládal. Volbu naleznete v sekci: Nastavení - Program 2 - a zde je třeba odškrtnout volbu "Ident. byty v kódování UTF-8".