Ako nájsť a bojovať proti kusovníku je vo WordPress nepríjemná chyba. Čo sú to hlavičky HTTP. Všeobecná teória Škaredé informačné hlavičky

  • 29.06.2020

Dnes sme sa rozhodli hovoriť o tom, čo správa znamená. "Varovanie: Nie je možné upraviť informácie o hlavičke - hlavičky, ktoré už odoslal (výstup bol spustený na / home / ..." ktoré sa zobrazili na webovej stránke namiesto jej hlavného obsahu.
Ako sa ukázalo, sieť na túto tému napísala dosť, ale neexistuje zovšeobecnený návod, čo to všetko znamená a ako sa jej zbaviť.
Rozhodli sme sa pridať pár kvapiek do obrovského množstva informácií o tejto téme, pretože sme tomuto problému čelili osobne.

Pred časom sme uskutočnili prevod niekoľkých klientskych stránok z jedného hostiteľa na druhý.
Všetko prebehlo v poriadku, stránky boli dostupné, ale keď som skúsil ísť k adminovi. panel, po zadaní používateľského mena a hesla sa namiesto ovládacieho panela objavila biela stránka.
Skontrolované na iných stránkach - to isté.
Z dôvodu zistenia možných dôvodov sme zapli zobrazovanie chýb.
Ak to chcete urobiť, musíte pomocou protokolu FTP upraviť súbor .htaccess v koreňovom adresári webu tak, že doň pridáte riadok:

Php_flag chyby zobrazenia

Potom sa pri vstupe do panela správ zobrazilo niekoľko správ ako „Upozornenie: Nie je možné upraviť informácie o hlavičke - hlavičky, ktoré už odoslal (výstup sa začal na /home/.../functions.php:1552) v /home/.../ public_html /wp-login.php na riadku 362 "atď.

Na základe vyhľadávaní sa našli informácie, že táto správa upozorňuje, že informácie o hlavičke nie je možné zmeniť, pretože hlavičky (informácie o nich) už boli odoslané skôr a ďalej v zátvorkách bolo uvedené, ktoré riadky sa v ktorých súboroch prenášajú von.


Nadpisy (Hlavičky) Je servisná informácia servera, na ktorom je stránka umiestnená. Predtým, ako prehliadač zobrazí obsah stránky, prijme hlavičky zo servera, kde sú uvedené rôzne údaje: či je povolené ukladanie do pamäte cache stránky, jej kódovanie, typ obsahu stránky a ďalšie. V systémoch na správu obsahu stránok sú hlavičky tvorené funkciami umiestnenými v rôznych systémových súboroch.
Požadovaný stav- hlavičky musia byť zaslané pred hlavným obsahom (obsahom) stránky.


Pokiaľ je obsah stránky prenášaný pred hlavičkami, potom nastane situácia, na ktorú nás upozorní správa „Varovanie: Nie je možné upraviť informácie o hlavičke - hlavičky už odoslal ...“

V akých situáciách k tomu môže dôjsť? Ako už bolo spomenuté, v modernom CMS sú hlavičky výsledkom jednej alebo viacerých funkcií. Samotná funkcia je časť kódu uzavretá medzi iniciálou a konečné ?> značky.

Čokoľvek mimo týchto značiek sa považuje za obsah stránky.
Ak teda na začiatku stránky existujú funkcie, ktorých výsledkom sú odoslané hlavičky, a zobrazí sa nám správa „Varovanie: Nie je možné upraviť informácie o hlavičke ...“, potom sa ukáže, že niektoré informácie súvisiace s obsahom stránky je odoslaný zo servera pred hlavičky ...

Čo sú tieto informácie a ako ich nájsť. Najčastejšie ide o medzery a prázdne riadky.

Medzera alebo prázdny riadok sa interpretujú ako znaky v hlavnom obsahu stránky, takže sa ukáže, že časť hlavného obsahu je pred hlavičkami a najskôr sa odošle do prehliadača.

Musíte si stiahnuť súbory uvedené v správach „Upozornenie: Nemôžem upraviť informácie o hlavičke ...“ do miestneho počítača, otvoriť ich v editore kódov (používam NotePad ++) a starostlivo skontrolovať, či v nich nie sú prázdne riadky a medzery:

Zároveň existuje jedna dôležitá vlastnosť, ktorá môže výrazne predĺžiť čas strávený hľadaním riešenia.
Súbor nemusí obsahovať prázdne riadky a medzery, ale ak bol uložený v kódovaní UTF-8, môže editor, v ktorom bol súbor vytvorený, vložiť na začiatok dokumentu cudzí znak. Tento znak je identifikátor UTF-8, ktorý sa rovná priestoru s nulovou šírkou, ktorý sa nemusí v editore zobraziť vôbec, ale na serveri bude vnímaný ako hlavný obsah a zobrazený pred hlavičkami.

Ak sa chcete tohto identifikátora zbaviť, musíte stiahnuté súbory znova uložiť vo formáte UTF-8 bez kusovníka(UTF-8 bez kusovníka).

NotePad ++ robí s touto úlohou vynikajúcu prácu.

Po týchto akciách a aktualizácii súborov na serveri by správa mala zmiznúť a web bude fungovať ako obvykle.

S touto chybou ma neustále kontaktujú a pýtajú sa: „ Kde je chyba? Celý čas som niekde dostával také listy. 500 , nie menej. Je čas skončiť s chybou „“. V tomto článku vám poviem o príčinách tejto chyby, ako aj o tom, ako ich vyriešiť.

Ak preložíte túto chybu do ruštiny, zobrazí sa niečo ako toto: " Názov nie je možné zmeniť, pretože už boli odoslané". Čo to je." nadpisy„? Poďme na to.

Keď server vráti odpoveď klientovi okrem tela (napríklad HTML kód stránky), existujú aj nadpisy. Obsahujú kód odpovede servera, cookie, kódovanie a mnoho ďalších parametrov služby. Môcť Skript PHP poslať hlavičku? Samozrejme, že môže. Na to existuje funkcia hlavička ().

Táto funkcia sa napríklad neustále používa, keď. Táto funkcia sa tiež pravidelne používa, keď.

Pri odosielaní sa upravia aj hlavičky cookie a na začiatku relácie (funkcia session_start ()).

A teraz o tom, prečo sa chyba stále vyskytuje? Server vždy najskôr pošle hlavičky serveru a potom telo. Ak server už vrátil hlavičky, telo išlo a potom na niektoré narazilo session_start ()... Ukazuje sa, že budúci programátor zabudol poslať hlavičky pred začiatkom tela a teraz chce dobehnúť vlak, ktorý už odišiel.

Tu je kód s chybou „“:



?>

Samozrejme, také hlúposti PHP neodpúšťa. A musel som napísať takto:

session_start (); // Začnime reláciu
?>

Tento skript už nebude spôsobovať chyby, pretože najskôr sa odošlú všetky hlavičky a až potom sa vygeneruje telo odpovede servera.

Ďalší príklad chybového kódu:

ozvena „Ahoj!“; // niečo vytlačiť
session_start (); // Začnime reláciu
?>

To isté, z nejakého dôvodu sa najskôr zobrazí telo (alebo jeho časť) a potom sme si spomenuli, že je potrebné upraviť aj hlavičky.

Sami premýšľajte, ako tento kód prepísať.

Ďalší príklad:




východ;
?>

Keď autor takéhoto kódu zlyhá, je touto chybou prekvapený a hovorí: „Je to veľmi zvláštna náhoda, keď je operácia úspešná, všetko je v poriadku a keď dôjde k chybe, bolo mi povedané, že nemôžem upraviť informácie v hlavičke - hlavičky už boli odoslané. “ Nie doslovne, ale o to ide.

Problém je rovnaký a je správne písať takto:

$ error = true; // Vyskytli sa nejaké chyby?
if ($ error) echo "Vyskytla sa chyba";
hlavička else ("Umiestnenie:". $ _ SERVER ["HTTP_REFERER"]); // Presmerovanie späť
východ;
?>

Existujú aj jemné chyby:

hlavička ("Umiestnenie:". $ _ SERVER ["HTTP_REFERER"]); // Presmerovanie späť
východ;
?>

Chyba v tomto kóde nastáva z dôvodu medzery ktorý je prítomný predtým ... Priestor je normálny charakter a je súčasťou tela odpovede. A keď to server uvidí, dôjde k záveru, že už nebudú žiadne hlavičky a je čas zobraziť telo.

Existujú aj nasledujúce chyby, ktoré majú rovnakú povahu. Povedzme, že existuje súbor a.html:

require_once "a.html";
hlavička ("Umiestnenie:". $ _ SERVER ["HTTP_REFERER"]); // Presmerovanie späť
východ;
?>

A človek je úprimne prekvapený, odkiaľ pochádza chyba, ak nič nevydal? Preto musíte hľadať nie konkrétne 1 súbor a všetky súbory, ktoré sú v ňom obsiahnuté. A v tých, ktoré sú pripojené na pripojených, musíte tiež hľadať, aby nebol žiadny výstup.

A posledný bod, ale ťažší. Ukazuje sa, že niekedy sa táto chyba vyskytne aj pri správnom kóde. Potom všetko ide o kódovanie... Uistite sa, že kódovanie súboru „ UTF-8 bez kusovníka„a je to presne tak“ bez kusovníka„a nielen“ UTF-8". Pokiaľ Kusovník sú bajty na samom začiatku súboru a sú výstupom.

Naozaj dúfam, že tento článok pomôže vyriešiť úplne všetky problémy spojené s chybou „“, pretože som sa snažil pokryť všetky vzniknuté problémy. A potom sa musíte obrátiť na hlavu a zamyslieť sa, čo je na vašom kóde zlé?

V tomto článku sa pozrieme na hlavné príčiny a riešenia chyby „Nedá sa zmeniť hlavička - pretože už boli odoslané“. ("Nie je možné upraviť informácie o hlavičke - hlavičky, ktoré už odoslal").

Čo znamená táto chyba?

Aby ste pochopili príčiny chyby, musíte najskôr pochopiť, čo sú tieto „hlavičky“.

Nejdeme hlboko do teórie. Povedzme, že skôr, ako ktorýkoľvek používateľ otvorí webovú stránku, odošlú sa mu tieto „hlavičky“, ktoré obsahujú kódovanie, jazyk stránky, údaje o serveri a ďalšie informácie o službe. Stojí tiež za to osobitne dodať, že súbory cookie a relácia sa odosielajú aj v hlavičkách.

Aké príkazy spôsobujú túto chybu?

Chyba „Nie je možné upraviť informácie o hlavičke - hlavičky už odoslal“ môže vyvolať príkazy PHP, ako sú hlavičky, setcookie a ďalšie súvisiace s cookies alebo reláciami.

Dôvody a riešenia chyby.

Najbežnejšia chyba nastáva z dôvodu nedostatku skúseností. Už sme zistili, že hlavičky sa odosielajú skôr, ako sa začne načítavať samotná stránka.

Programátori, najmä začiatočníci, to však jednoducho zabudnú alebo o tom ani nevedia. A najskôr sa pokúsia niečo na stránke zobraziť - najčastejšie pomocou príkazu echo, až potom nastavia cookies, pošlú hlavičky atď. Čo vedie presne k tejto chybe.

Tu je ukážka kódu, ktorý by mal za následok takúto chybu:

A tu je ten správny:

To znamená, že v prvom rade nemôžete odoslať nič pred odoslaním hlavičiek!

To nie je vždy zrejmé, ale je tu chyba s miernym rozdielom. To je, keď váš dokument php začína medzerami alebo prázdnymi riadkami, čo znamená výstup v prehliadači týchto riadkov.

To môže byť veľmi ťažké sledovať, pretože napríklad Windows blockchain môže na začiatok pridať Byte Order Mark bez toho, aby nás varoval alebo dokonca ukázal tento symbol. V takom prípade stojí za to otvoriť dokument s ostatnými editormi a skontrolovať.

Tu je príklad nesprávneho priradenia hlavičiek:

To je po druhé predtým

Mali by ste byť obzvlášť opatrní, ak použijete príkaz include, ktorý v skutočnosti skombinuje všetky súbory a vytvorí jeden výsledný. Ak ste najskôr pripojili hlavičku webu (posúvač, ponuku atď.) A potom sa pokúsili poslať hlavičky do hlavný súbor, potom sa samozrejme dostanete z tejto chyby.

Tu je príklad takéhoto nesprávneho kódu:

Vložené dňa Št, 05/04/2017 - 12:55

Opis konkrétneho problému

Po kliknutí na tlačidlo sa zobrazí chyba:

Varovanie: Nie je možné upraviť informácie o hlavičke - hlavičky, ktoré už odoslal (výstup spustený na C: \ OpenServer \ domains \ testsite \ WEB \ 5_phpRedirect.php: 10) v C: \ OpenServer \ domains \ testsite \ WEB \ 5_phpRedirect.php na riadku 12

Kód je podobný kódu uvedenému v tejto téme:

Experimentálny web

Vyberte skript na stiahnutie



Skript obslužného programu:



Kedy sa to stane

Chyba (varovanie) ako:

Varovanie: Nie je možné upraviť informácie o hlavičke - hlavičky, ktoré už odoslal

Vyskytuje sa, ak ste už vykonali niečo, čo si vyžaduje inštaláciu hlavičiek prehľadávača, a teraz ich chcete prepísať novými. Napríklad, ak ste už text zobrazili, php nastaví hlavičky (najmä hlavičku) Poloha- ktorá ukazuje, či zostať na požadovanej stránke alebo či potrebujete prejsť na inú stránku a získať odpoveď na tamojšiu žiadosť), aby sa prehliadaču klienta (v jeho odpovedi) ukázalo, ako sa má správať.

Koreň problému

Problém vo vašom prípade je pravdepodobne taký, že už poskytujete obsah (značky HTML, ktoré sú v súbore zmiešané so skriptom). predtým príkazy:

Hlavička ozveny ($ redirect);

Pamätajte, že funkciu header () je možné volať, iba ak je klient zatiaľ neboli prenesené žiadne údaje... To znamená, že by mal ísť ako prvý na výstupe, pred jeho volaním by nemali byť žiadne HTML tagy, prázdne riadky atď. Pomerne často sa vyskytne chyba, keď sa pri čítaní kódu pomocou funkcií súboru, ako je zahrnutie alebo požiadavka, v tomto kóde vyskytnú medzery alebo prázdne riadky, ktoré sa zobrazia pred volaním header (). Rovnaké problémy môžu nastať pri použití jedného súboru PHP / HTML.

To znamená, že je potrebné zbaviť obslužný program skriptov z html - koniec koncov, v skutočnosti nezobrazí nič sám, ale jednoducho ho prenesie na inú adresu - toto je prvé.

Hlavička ($ redirect);

Hlavička ozveny ($ redirect);

Experimentujte

Pretože echo () skutočne píše telo odpovede http, a nie v hlavičkách, a hlavička vráti void (to znamená, že nevráti hodnoty), ako je uvedené vyššie, potom nemá zmysel používať echo (), ale
- napriek tomu navrhujem uskutočniť experiment:

  1. odstráňte html
  2. neodstraňujte ozvenu

Pretože header () je pre vás volaný v skutočnosti pred echo () (pretože header () je argumentom pre echo ()) a preto sa vráti - zároveň skontrolujeme, či funkcia vráti null - či bude interpretovaná ako prázdny reťazec alebo (čo alebo skôr) ozvena ani nezačne fungovať, pretože už došlo k presmerovaniu.

Poďme si opäť objasniť dôvod

Tých. pred volaním do hlavičky () nemal by sa zobrazovať žiadny obsah(čo sa píše o popise funkcie: http: //php.net/manual/ru/function.header ...)

  • 1) nepoužívať echo
  • 2) nepoužívanie obvyklého ukladania html textu do prehliadača.

V našom prípade očividne echo nič neovplyvní, ale html v obslužnom programe dokonca áno.

problém bol vyriešený

Na váš návrh boli odstránené značky HTML. Teraz dôjde k presmerovaniu správne, skript obslužného programu vyzerá takto:

Funkcia echo skutočne neovplyvňuje výkon, t.j. možno nechať ako u S. Holznera:

Pri formátovaní kódu pre presmerovanie by ste mali venovať pozornosť prípone súboru, na ktorý sa prechod uskutoční: s navrhovanou syntaxou by mal byť uvedený v argumente hlavičky.

  • Ak chcete písať komentáre, prihláste sa

Môžete to však zariadiť a

Ale môžete nechať pracovať aj predchádzajúceho obslužného programu.

Presmerovanie používateľa

ak nastavíte túto možnosť v súbore php.ini

Output_buffering = 4096

  • Ak chcete písať komentáre, prihláste sa

Opätovné odosielanie hlavičiek je zakázané, HTTP - protokol tak nefunguje! Čo však môžeme potom robiť? Ak po zobrazení na stránke musíte tiež spustiť reláciu a nastaviť súbor cookie? - Pamätám si na ukladanie do vyrovnávacej pamäte výstupu.

To znamená, že keď je nastavená nenulová veľkosť vyrovnávacej pamäte, potom kým nie je plná, stále existuje príležitosť manipulovať s hlavičkami. Ak je veľkosť vyrovnávacej pamäte nulová, po zobrazení obsahu sa okamžite vráti predchádza odovzdanie hlavičiek odpovedí http klientovi.

A ukazuje sa, že chceme zmeniť hlavičky, ktoré už „odleteli“ po sieti na klienta (čo znamená, že ich už nie je možné opraviť - najmä hlavičku Poloha, ktorý označuje, či zostať na požadovanej stránke, alebo požiadať o inú - odpoveď skriptu „redirector“ (pre nás je to obslužný program formulára) iba hovorí, že musíme požiadať o ďalšiu stránku), na čo nás php varuje o.

Ale: samozrejme je nemožné vyriešiť problém týmto spôsobom (nie veľmi správne, presnejšie).

_____________
matfak vgu a ostatná klasika =)

  • Ak chcete písať komentáre, prihláste sa

S touto chybovou správou sa často stretávajú programátori noví v PHP. Pochopenie, prečo k tejto chybe dôjde, vám pomôže nájsť riešenie.

PHP za vás pracuje s mnohými generáciami webových stránok, a to aj bez toho, aby ste sa na to pýtali. Webová stránka má dve časti: hlavičku a telo.

K tejto bežnej chybe PHP dochádza, keď programátor urobí chyby pri manipulácii alebo vytváraní hlavičiek. Tu je príklad:

Varovanie: Nie je možné upraviť informácie o hlavičke - hlavičky, ktoré už odoslal (výstup spustený na /home/usr1/public_html/sent.php:42) v /home/usr1/public_html/includes/theme-header.php na riadku 12

Spravidla si nemusíte robiť starosti s hlavičkou, pretože sa generuje automaticky a obsahuje informácie o stránke, serveri a coockie. Informácie v hlavičke sú dôležité, ale zvyčajne ich používateľ nevidí. Tu je niekoľko príkladov:

Dátum: Po, 10. júla 2006 18:51:59 GMT Server: Apache / 2.2.0 (Unix) mod_ssl / 2.2.0 OpenSSL / 0.9.7g Kódovanie obsahu: gzip Typ obsahu: text / html

Programátori niekedy chcú zmeniť niektoré hodnoty hlavičky. Napríklad, ak PHP generuje výstup XML, je potrebné to zmeniť. Ďalším bežným príkladom je presmerovanie prehliadača používateľa na inú webovú stránku pomocou prvku hlavičky Umiestnenie, ako je popísané v tomto článku.

Hlavička musí byť prvou odpoveďou webového servera a je od tela oddelená jedným prázdnym riadkom. Príčinou tejto chyby je, že určitá časť tela webovej stránky bola používateľovi odoslaná pred pokusom o nastavenie hodnoty hlavičky. Pretože vám PHP uľahčuje veľa vecí, problém môže číhať na obvyklom mieste. Tu je niekoľko tipov na nájdenie problému:

  1. Vyhľadajte výrok hlavičky (), ktorý spôsobuje problém. Chyba musí byť na tomto riadku alebo pred ním.
  2. Pred touto hlavičkovou inštrukciou vyhľadajte všetky pokyny, ktoré by mohli smerovať výstup na používateľa. Ak nájdete jeden alebo viac, zmeňte kód tak, aby sa pred nimi presunul príkaz hlavičky. Komplexné podmienky môžu problém skomplikovať, ale tiež pomôcť pri riešení problému. Prípadne môžete použiť podmienený výraz v hornej časti skriptu PHP, ktorý čo najskôr zistí hodnotu hlavičky a nastaví ju tam.
  3. Uistite sa, že mimo začiatočných a koncových značiek PHP nie sú medzery. Zatiaľ čo pred začiatočnou značkou je prázdny riadok
  4. Ak ukladáte súbor v kódovaní UTF-8, skontrolujte, či je súbor uložený bez podpisu (bez kusovníka). Podpis je bajt pridaný na začiatok súboru a ak je skript PHP uložený v tomto formáte, bude tento bajt vnímaný ako súčasť výstupu tela stránky, čo by nemalo byť povolené, aby sa zabránilo problémom, ktoré sme vytvorili. uvažujú.



Počítačová stránka pomoci

© Autorské práva 2021,
rzdoro.ru - Stránka pomoci pre počítač

  • Kategórie
  • Žehliť
  • Windows 10
  • Skenovanie
  • Windows 7
  • Žehliť
  • Windows 10
  • Skenovanie
  • Windows 7