Diskuze: session_start() a header()

PHP PHP session_start() a header() American English version English version

Avatar
Matěj Kripner
Redaktor
Avatar
Matěj Kripner:

Zdravím,
mám následující kód:

<!DOCTYPE html>
<?php
    session_start();

A o několik řádků níže poté volám funkci header().
Vyhledávač ale vypisuje chybu:

Warning: Cannot modify header information - headers already sent by (output started at /hosting/www/matejkripner.cz/www/prihlaseni.php:2) in /hosting/www/matejkripner.cz/www/prihlaseni.php on line 46

Žádné bílé znaky ani html obsah před header() nemám, nevíte někdo, čím by to mohlo být? Mám trochu podezření na funkci session_start(). Předem díky za pomoc :)

Odpovědět 5.6.2014 19:37
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Matěj Kripner
Petr Nymsa:

a ten <!DOCTYPE html> není HTML ? ;)

Nahoru Odpovědět 5.6.2014 19:39
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Matěj Kripner
Redaktor
Avatar
Odpovídá na Petr Nymsa
Matěj Kripner:

Mno, myslel jsem, že to se do obsahu nepočítá :D A navíc to DOCTYPE tam musí být, ne?

Nahoru Odpovědět 5.6.2014 19:55
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
Odpovídá na Matěj Kripner
Michal Žůrek (misaz):

ty funckce pro session a header pracují s hlavičkami HTTP. Hlavička HTTP vypadá třeba následovně:

HTTP/1.1 200 OK
Date: Thu, 05 Jun 2014 17:53:19 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=10, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html

<!DOCTYPE html>
...

TO úplně první, říka, že se jedná o HTTP 1.1 a nedošlo k chybě tudiž se posílá stavový kód 200. ty další ve formátu klíč:hodnota jsou hlavičky, které nastavuješ s pomocí funkce header, tyto hlavičky musí být v dokumentu úplně první i před jeho obsahem. Pokud však mu před hlavičkami pošleš doctype, tak on už ty hlavičky nenajde, protože je hledá jenom na začátku. Funkce session používá také hlavičky a proto také musí být volána před jakýmkoliv výpisem.

Nahoru Odpovědět  +1 5.6.2014 19:57
Nesnáším {}, proto se jim vyhýbám.
Avatar
Matěj Kripner
Redaktor
Avatar
Matěj Kripner:

Takže DOCTYPE až pod php blok?

Nahoru Odpovědět 5.6.2014 19:59
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
Odpovídá na Matěj Kripner
Michal Žůrek (misaz):

musíš si to představit. Cokoliv je mimo blok PHP se posílá automaticky (tudfiž potom už nemůžeš poslat hlavičky). V bloku PHP se kód zpracovává a odesílat můžeš pomocí různých funkcí (např. echo, var_dump, die, ...) cokoliv ty funkce odešlou znamená, že jsi přišel o možnost posílat hlavičky. právě proto se doporučuje dát blok PHP na začátek a tam odeslat všechny hlavičky. V praxi si však všechny tyto souvislosti musíš uvědomit. Mám např 50 řádkový kód a header volám na 49 řádku. prostě těch předchozích 48 nepracuji s výstupem, který jde k uživateli.

Nahoru Odpovědět  +1 5.6.2014 20:04
Nesnáším {}, proto se jim vyhýbám.
Avatar
Matěj Kripner
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Matěj Kripner:

Díky moc, pomohlo to a vše funguje skvěle :)

Nahoru Odpovědět 5.6.2014 20:22
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.