PSPad, PHP, utf-8 a Cannot modify header information

PSPad, PHP, utf-8 a Cannot modify header information

Nočný zážitok s PSPadom a PHP neprajem nikomu zažiť. Každý večer, keď mám možnosť sedieť pri počítači si napíšem, upravím alebo aj vymažem nejaký ten skript. Rovnako som postupoval aj dnes v noci…
Editor, ktorý momentálne používam je PSPad. Zhodou okolností som sa rozhodol zavŕtať do jeho nastavení !, kde som si prezrel každú jednu sekciu, a ako to býva každú z nich som ihneď prestavil :-). Takéto zásahy majú väčšinou nepríjemný dopad, pretože som si už ani nepamätal čo som zmenil.

Skript, ktorý som mal aktuálne otvorený bol index.php. Čo to som v ňom pozmenil. Spustil som si Total Commander a preniesol som ho na server. Otvoril som si prehliadač Opera a cez záložky som sa dostal na moju stránku. A čo nevidím? Bola tam chybová hláška:

Warning: Cannot add header information - headers already sent by...

Samozrejme nebola len jedna. Išlo o 4 warnings (1x headers, 3x sessions). Riešenie tejto chyby ma nenapadalo, pretože všetky mezdery, entery, taby a podobné hlúposti som odstránené mal. Po zúfalom hodinovom riešení chyby som sa obrátil na vyhľadávač Google. Zvyčajne sa ledva dostanem na 3 stranu výsledkov ale teraz som sa rozhodol ísť hlbšie. 1-2 strana bola preplnená žvástami pre začiatočníkov, kde sa popisovala základná vec - "pred posielaním header() nemôže byť do prehliadača odoslaný žiadny obsah".

Po tvrdom hľadaní som sa dopracoval na nejakú maďarskú stránku (maďarský jazyk neovládam). Prečítal som si asi 6 riadkový komentár, ktorý mi vnukol myšlienku kde bude chyba. Všetko čo som si preložil bolo utf-8 (po maďarsky sa to povie naštastie rovnako :-)).

Spomenul som si na jednu zmenu, ktorú som vykonával v nastaveniach, čo som písal už na žačiatku. Ide o nastavenie znázornené na obrázku:

Nastavenia PSPadu

Toto nastavenie totiž zamedzilo funkčnosti môjho CMS systému v niekoľkých smeroch. Na začiatok dokumentov, ktoré som uložil s týmto nastavením sa zapísaly identifikačné byty pre kódovanie utf-8. To znamenalo odoslanie obsahu do prehliadača skôr ako budú zahájené sessions a headers. Spôsobené škody:

  • personalizácia užívateľov (vrátane admina a moderátorov) bola nefunkčná, pretože sessions nefungovali
  • nemohli byť odoslané žiadne headers, takže MIME typ application/xhtml+xml bol zatratený rovnako ako captcha

Nastavenie som okamžite vypol a poškodené skripty uložil bez identifikačných bytov. Teraz je už všetko v poriadku. Od začiatku som mal pocit, že to bude niečo s utf-8 ale mal som na to prísť skôr. Rozhodne toto nastavenie PSPadu odporúčam vypínať, ak ste webdeveloper.

Dúfam, že som upozornil na moju lamerskú chybu ale aspoň sa poučia tí, ktorí sa podobnú chybu chystajú nevedomky vykonať.

Alternatívne verzie: Text PDF Voice
Autor: PaBi3 · Kategória: Zo sveta · Dátum: 28.12.2005 01:43

Komentáre

#1 Honza
10.01.2006 07:55
Nejsi sám, já to řešil taky celý den před nějakým časem. Je to celkem nepříjemná věc :(

#2 Tomas K. Web
13.04.2006 01:42
ale zaujimave je, ze v php 4 nieje potrebne posielat headers a session start na zaciatku - bez problemov to funguje aj po vlozeni v strede dokumentu ...

#3 agu
18.07.2006 17:44
dik, vyriesil si moje poldnove trapenie [wink]

Osobné údaje
Captcha
Odpíšte text z obrázku. Rozlišujú sa malé a veľké písmená.
Obsah
Možnosti