Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: session_start() a header()

Aktivity
Avatar
Matěj Kripner
Tvůrce
Avatar
Matěj Kripner:5.6.2014 19:37

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
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Matěj Kripner
Petr Nymsa:5.6.2014 19:39

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
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Matěj Kripner:5.6.2014 19:55

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
Avatar
Odpovídá na Matěj Kripner
Michal Žůrek - misaz:5.6.2014 19:57

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
5.6.2014 19:57
Avatar
Matěj Kripner
Tvůrce
Avatar
Matěj Kripner:5.6.2014 19:59

Takže DOCTYPE až pod php blok?

 
Nahoru Odpovědět
5.6.2014 19:59
Avatar
Odpovídá na Matěj Kripner
Michal Žůrek - misaz:5.6.2014 20:04

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
5.6.2014 20:04
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Matěj Kripner:5.6.2014 20:22

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

 
Nahoru Odpovědět
5.6.2014 20:22
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.