ugrás a tartalomhoz

Cannot modify header information setcookie() hívásra

TIV · 2006. Nov. 2. (Cs), 20.41
Üdv!

Warning: Cannot modify header information - headers already sent by (output started at....

Olvasgattem gugliban sok minden erről a hibáról....

1. php.ini output_buffering = off (ekkor jött elő)
2. nem header, semmi oldalátirányítás nincs, hanem setcookie van!

Van az index oldalam, ami beinclude-ol($ezt=asd) egy txt-t (/cikkek/asd.txt) és kiírja a tartalmát.

Hogy jön ide a setcookie?
Az index php számolja a nézettségét a fájlnak úgy, hogy megnézi sessioncookie-ban benne van-e a fájl azonosítója. ha benne van, nem csinál semmit csak kiírja a cikket az eddigi nézettséggel, ha nincs benne, akkor megnöveli a nézettséget és kiírja a cikket az új nézettséggel (és természetesen hozzáadja magát a sessioncookie-hoz). Ez a módszer működött amíg nem volt off-on az output_buffering. most viszont nem megy és annyiszor növeli a nézettséget ahányszor a frissítés gombot megnyomom.

A kód előtt és után is van HTML kód. Olvastam néhány dolgot erről az ob_start-ról de nem tudom jól használom-e. ob_start()-ot raktam a setcookie elé és az index.php legvégére ob_end_flush()-t, de nem jó. Ezeket kell amúgy paraméterezni? Én nem paramétereztem.

Lehet azt fogom csinálni, hogy megpróbálok minden HTML elemet a a setcookie-s PHP után rakni, de azért érdekelne egy szakszerűbb megoldás!

Előre is köszönöm!
ui.: rákerestem itt is weblaboron, de mindenhol header-rel foglalkoztak az emberek ezé mert új témát nyitni, nameg bátor is vagyok! KÖSZÖNÖM!
 
1

setcookie() vagy header() egykutya

Hojtsy Gábor · 2006. Nov. 2. (Cs), 21.28
Mindegy, hogy setcookie() vagy header(), ugyanúgy fejlécet állít be. Nem lehet HTML kód a setcookie() előtt ugyanúgy, ahogy header() előtt sem lehet. Vagy az említett PHP beállítást kell bekapcsolni, vagy ob_start()-olni kell még a HTML kód (gyakorlatilag bármilyen kimenet) előtt, és mindenképpen a legutolsó setcookie() és/vagy header() hívás után kell az ob_end_flush().
2

nem nem és nem

TIV · 2006. Nov. 3. (P), 14.12
debug képpen kidobáltam a php kód elől és után minden html kódot. így gyakorlatilag egy <? és ?> van, aminek az elejére ob_start végére ob_end_flush téve ugyanaz a hiba üzi. a kódban viszont -és sztem ez a baj- van egy include! ...lehet ez a baj?(txt fájlt include-ol, szöveg van benne igen) hogy lehetne megoldani? gyakorlatilag bárhova raktam eddig az ob_start()-t és ob_end_flush()-t nem változott semmi!

köszönöm a segítséget!
3

szöveg sem lehet

Hojtsy Gábor · 2006. Nov. 3. (P), 15.31
Mi a "nem nem és nem"? Nem világos amit írtam? Megismétlem, és megmagyarázom mégegyszer.

Vagy az említett PHP beállítást kell bekapcsolni, vagy ob_start()-olni kell még a HTML kód (gyakorlatilag bármilyen kimenet) előtt, és mindenképpen a legutolsó setcookie() és/vagy header() hívás után kell az ob_end_flush().
Mindenféle nem fejlécbe író (tehát setcookie() és header()-től eltérő) kimenet elé kell tenni az output buffer kezdését. A php.ini beállítás ezt nyilván teljesíti, mert azt a PHP az oldal feldolgozása előtt érvényre juttatja. Ha nincs ilyen beállítás, neked kell teljesítened. Nem szabad semmit kiírni, legyen az HTML kód, szóköz, include-olt szövegfájl, ha nincs output buffer, és még nem vagy készen a sütikkel meg a fejléc sorokkal.
4

igen igen és igen

TIV · 2006. Nov. 3. (P), 17.35
Nagyon okos vagy, köszönöm! A <? előtt volt 3 szóköz 8(

Asszem most már értem miről van szó, összefoglalva: Ha fejlécbe író parancsot használok, előtte nem állhat HTML, szóköz, bármi szöveg. Ha mégis, akkor ob_start kell elé és az utolsó setcookie/header után ob_end_flush. Igazam van?

Nagyon nagyon köszönöm a segítséget!
5

kimenet, és nem körbevenni szvsz

erenon · 2006. Nov. 3. (P), 17.39
Kimenet nem állhat a fejlécmódosító parancsok előtt, ha pedig mégis kéne, akkor azt bufferelni kell, (ob_start) és miután a headereket kedvedre módosítottad, kiürítheted a buffert (ob_flush és társai)

csak a pontosság kedvéért.
6

Köszöntem!

TIV · 2006. Nov. 3. (P), 17.44
Köszönöm mindkettőtöknek, működik!