Jumalattomat tiedon otsikot. Kuinka löytää ja voittaa tuoteluettelo - epämiellyttävä virhe WordPressissä. Miten otsikkotietoja ei voi muokata – jo virheellisesti lähetetyt otsikot ilmestyvät?

Ihmiset tulevat jatkuvasti luokseni tämän virheen kanssa ja kysyvät: " Missä on vika?". Koko ajan olen saanut noin muutaman tämän kaltaisen kirjeen 500 , ei vähempää. On aika lopettaa "" -virhe. Tässä artikkelissa puhun tämän virheen syistä sekä sen ratkaisemisesta.

Jos käännetään tämä virhe venäjäksi saat jotain tällaista: " Otsikkoa ei voi muuttaa, koska ne on jo lähetetty"Mikä tämä on" otsikot"? Selvitetään se.

Kun palvelin palauttaa vastauksen asiakkaalle muulle kuin rungon (esim. HTML-koodi sivut), on myös otsikoita. Ne sisältävät palvelimen vastauskoodin, evästeen, koodaus ja monet muut palveluparametrit. Voi PHP-skripti lähetä otsikko? Tietysti voi. Tätä varten on toiminto otsikko().

Tätä toimintoa käytetään esimerkiksi jatkuvasti, kun. Myös tämä toiminto käytetään säännöllisesti.

Myös otsikoita muutetaan lähetettäessä evästeen ja istunnon alussa (toiminto session_start()).

Ja nyt siitä, miksi virhe esiintyy edelleen? Palvelin antaa aina ensin otsikot palvelimelle ja sitten rungon. Jos palvelin on jo palauttanut otsikot, runko menee, ja sitten se kohtaa joitain session_start(). Osoittautuu, että valitettava ohjelmoija unohti lähettää otsikot ennen kehon alkua ja haluaa nyt saada kiinni jo lähteneen junan.

Tässä on koodi, jossa on virhe "":



?>

Tietysti tuollaista hölynpölyä PHP ei anna anteeksi. Ja se olisi pitänyt kirjoittaa näin:

session_start(); // Aloitetaan istunto
?>

Tämä komentosarja ei aiheuta virheitä, koska kaikki otsikot lähetetään ensin ja vasta sitten luodaan palvelimen vastausteksti.

Toinen esimerkki koodista, jossa on virhe:

kaiku "Hei!"; // Tulosta jotain
session_start(); // Aloitetaan istunto
?>

Sama juttu, jostain syystä runko (tai osa siitä) näytetään ensin, ja sitten he muistivat, että heidän on myös muokattava otsikoita.

Mikä on oikea tapa kirjoittaa uudelleen tämä koodi, ajattele itse.

Toinen esimerkki:




poistua;
?>

Kun tällaisen koodin kirjoittaja epäonnistuu, hän yllättyy tästä virheestä ja sanoo: "Se on hyvin outo yhteensattuma, kun toiminto on onnistunut, kaikki on hyvin, ja kun tulee jokin virhe, minulle sanotaan, että otsikkotietoja ei voi muokata - otsikot jo lähetetty." Ei kirjaimellisesti, mutta se on se pointti.

Ongelma on sama, ja oikea tapa kirjoittaa se on:

$virhe = tosi; // Oliko virheitä?
if ($error) echo "Tapahtui virhe";
else header("Sijainti: ".$_SERVER["HTTP_REFERER"]); // Ohjaa takaisin
poistua;
?>

On myös hienoja virheitä:

header("Sijainti: ".$_SERVER["HTTP_REFERER"]); // Ohjaa takaisin
poistua;
?>

Tämän koodin virhe johtuu välilyönnistä, joka on olemassa aiemmin . Avaruus on normaali hahmo ja osa vastauskehoa. Ja kun palvelin näkee sen, se päättelee, että otsikoita ei enää ole ja on aika tulostaa runko.

On myös seuraavat virheet, jotka ovat luonteeltaan samanlaisia. Oletetaan, että siellä on tiedosto a.html:

request_once "a.html";
header("Sijainti: ".$_SERVER["HTTP_REFERER"]); // Ohjaa takaisin
poistua;
?>

Ja henkilö on vilpittömästi yllättynyt, mistä virhe tuli, jos hän ei antanut mitään? Siksi sinun ei tarvitse katsoa erikseen 1 tiedosto ja kaikki siihen sisältyvät tiedostot. Ja niissä, jotka on kytketty kytkettäviin, sinun on myös katsottava niin, ettei lähtöä ole.

Ja viimeinen kohta, mutta vaikeampi. Osoittautuu, että joskus tämä virhe ilmenee jopa oikealla koodilla. Sitten kaikki kyse on koodauksesta. Varmista, että tiedoston koodaus on " UTF-8 ilman tuoteluetteloa"ja aivan" ilman BOM:ia", ei vain " UTF-8". Koska BOM ovat tavuja, jotka tulevat aivan tiedoston alussa, ja ne ovat tulos.

Toivon todella, että tämä artikkeli auttaa ratkaisemaan ehdottomasti kaikki ""-virheeseen liittyvät ongelmat, koska yritin korostaa kaikkia esiin tulevia ongelmia. Ja sitten sinun täytyy kääntää pääsi ja miettiä, mikä koodissasi on vialla?

Tässä artikkelissa tarkastellaan, mihin otsikoita tarvitaan, menemättä yksityiskohtaisesti siihen, kumpi on vastuussa mistäkin. Yleisimpien otsikoiden roolit kuvataan seuraavissa artikkeleissa.

Kaikki artikkelit sarjasta:

  • Mitä ovat HTTP-otsikot? Yleinen teoria.

HTTP tulee sanoista HyperText Transfer Protocol. Protokolla on joukko sääntöjä, joiden mukaan erilaisia ​​laitteita vaihtaa tietoja. Se luotiin 1990-luvulla. Nyt sitä käytetään melkein kaikkialla Internetissä. Kaikki selainikkunassa näkemäsi on hankittu tämän protokollan kautta. http-otsikot ovat ehkä tärkein asia laitteiden välisessä viestinnässä. Ne välittävät perustiedot muodostettavasta yhteydestä ja tämän yhteyden kautta välitettävästä tiedosta.
Katsotaanpa kahden laitteen välistä viestintäkaaviota. Anna näiden laitteiden olla tietokoneesi ja palvelin Internetissä:

Kuten näet, selain lähetti http-pyynnön. Se voi näyttää jotain tältä:

GET /other-19 HTTP/1.1
Isäntä: www.scriptsite.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Hyväksy: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Hyväksy-kieli: ru,en-us;q=0.7,en;q=0.3
Hyväksy-koodaus: gzip,deflate
Hyväksy-merkki: windows-1251,utf-8;q=0.7,*;q=0.7
Pysy hengissä: 300
Yhteys: säilytä hengissä

Tässä tapauksessa ensimmäinen rivi on pyyntörivi, kaikki muut rivit ovat http-otsikoita, jotka sisältävät lisätietoja pyynnöstä, tätä tietoa pyytävästä asiakkaasta ja monista muista asioista.
Vastauksena pyyntöömme palvelin voi lähettää seuraavat otsikot:

Palvelin: Apache/2.0.61 (Unix) mod_ssl/2.0.61 OpenSSL/0.9.8k mod_dp20/0.99.2 PHP/5.2.5 mod_python/3.3.1 Python/2.5.1 mod_ruby/1.2.6 Ruby/1.8.6 (2007-09-24)

X-Powered-By: PHP/5.2.5

Set-Cookie: PHPSESSID=ft47gokfee6amv3eda3k1p93s3; polku =/

Välimuistin hallinta: ei tallentaa, ei välimuistia, on tarkistettava, jälkitarkastus = 0, esitarkastus = 0

Käytäntö: ei välimuistia

Keep-Alive: aikakatkaisu = 10, max = 1024

Yhteys: Keep-Alive

Siirtokoodaus: paloiteltu

Sisältötyyppi: teksti/html

Ensimmäinen rivi on tilarivi. Loput rivit ovat otsikoita. Kaavio osoitti, että myös sivun sisältö on ladattu. Tätä sisältöä ei kuitenkaan yleensä näytetä otsikon katselulaajennuksissa. Ja sivun sisältö on vain erikoistapaus. Protokollan mukaan sivua ei välttämättä tarvitse lähettää. Sen sijaan sekä kuva että äänitiedosto, ja video. Ja niillä kaikilla on hyvin erilaiset otsikot.

Kuinka nähdä http-otsikot?

http-otsikoiden näkemiseksi suosittelen seuraavia Firefox-selaimen laajennuksia:

Jos käytät Chrome-selain, voit tarkastella kaikkia tietoja napsauttamalla asetuspainiketta - työkalut - kehittäjätyökalut. Verkot-välilehti.
Käyttäjille ooppera selain En osaa neuvoa, koska en tunne tätä selainta. Kun laajennukset on asennettu ja käynnissä, yritä päivittää sivu. Näet välittömästi valtavat luettelot pyynnöistä ja vastauksista, joiden kautta selaimesi kommunikoi palvelimen kanssa.

Http-otsikot ja pääsy niihin php:ssä

Jos olet PHP-kehittäjä, voit käyttää pyyntöotsikoita getallheaders()-funktiolla. Ymmärtääksesi, miten se toimii, suoritetaan seuraava koodi:

Ja saamme tulosteen otsikkotaulukosta.

Mutta useammin niitä käytetään globaalin muuttujan $_SERVER kautta. Melkein kaikille http-otsikko tässä muuttujassa on samanlainen nimi, joka on muodostettu HTTP_header_name-periaatteen mukaisesti. Joten samalle 'User_Agent':lle on muuttuja $_SERVER['HTTP_USER_AGENT'];

Saadaksesi otsikot, jotka palvelin aikoo lähettää käyttäjälle, käytetään headers_list()-funktiota. Yleensä palvelin kirjoittaa puuttuvat pakolliset otsikot kaikkien komentosarjojen loppuun. Siksi tämä taulukko sisältää otsikot, jotka palvelin loi ennen skriptin suorittamista (ja niitä ei muuteta), tai ne, jotka asetamme manuaalisesti. Ne voidaan asettaa manuaalisesti funktiolla header("header text");
Suoritetaan seuraava koodi:

Näemme tulosteen otsikoista, jotka ovat valmiita lähetettäväksi, kun toimintoa kutsutaan:

Ensimmäinen otsikko asetettiin automaattisesti, ja se sisältää sen palvelimen nimen, jolla komentosarja on käynnissä. Toinen asennettiin manuaalisesti. Jos selain tarvitsi "Fruit"-otsikon, se otti sen palvelimen http-vastauksesta ja käyttää sitä. Mutta koska selaimemme ei tarvitse sitä, se yksinkertaisesti jättää huomioimatta rivin, jota se ei ymmärrä.

HTTP-pyyntörakenne

Pyyntömme näyttää tältä:

Sen ensimmäinen rivi, kuten aiemmin mainittiin, on kyselyrivi. Se koostuu kolmesta osasta:

  • menetelmä(menetelmä) - osoittaa, minkä tyyppinen pyyntö. Yleisimmät menetelmät: GET, POST, HEAD. Niistä kirjoitetaan seuraavassa kappaleessa.
  • polku(polku) - yleensä tämä on URL-osoitteen osa, joka tulee verkkotunnuksen jälkeen. Jos esimerkiksi kirjoitat osoitepalkkiin http://www.scriptsite.ru/about/, polun arvo on /about/.
  • protokollaa(protokolla) — käytetty protokolla. Tyypillisesti koostuu "HTTP":stä ja protokollaversiosta. Yleensä nykyaikaiset selaimet käyttävät versiota 1.1

Seuraavaksi tulevat otsikot merkkijonojen muodossa "Nimi: arvo" -muodossa.
Muuten, evästetiedot välitetään myös tässä pyynnössä yhtenä otsikoista. Useimmat näistä riveistä ovat valinnaisia. Kysely voidaan lyhentää kahdelle riville:

HANKI /article/show/4/ HTTP/1.1

Isäntä: scriptsite.ru

Pyyntömenetelmät

SAADA

Get-pyyntöä käytetään yleensä asiakirjan pyytämiseen ja joidenkin parametrien välittämiseen.
Tämä on tärkein tapa saada HTML-sivuja, kuvia, CSS- ja JavaScript-tiedostoja jne.
Koska parametrit voivat olla mitä tahansa, eikä palvelimella ole rajoituksia niiden käsittelylle, tiedon siirtoon käytetään usein tiedonpyyntömenetelmää. Meillä on esimerkiksi tällainen lomake

Tässä tapauksessa nämä parametrit näkyvät osoitekenttä selain.

LÄHETTÄÄ

Postitus on tapa lähettää tietoja palvelimelle. Vaikka voit lähettää tietoja palvelimelle GET-menetelmällä selaimen osoitepalkin kautta, useimmissa tapauksissa on suositeltavaa käyttää POST-testiä. Suurten tietomäärien lähettäminen GET:n kautta on epäkäytännöllistä. Lisäksi GET:llä on joitain rajoituksia, jotka eivät salli esimerkiksi tämän artikkelin julkaisemista verkkosivustollani vain yhden selainrivin kautta. POST-pyynnöt käytetään useimmiten verkkolomakkeiden lähettämiseen. Muokataan edellisen esimerkin lomaketta antamaan sille POST-menetelmä

On hämmästyttävää, kuinka pieni virhe voi tehdä WordPress-sivustostasi täysin käyttökelvottoman. Puhumme tietysti kuuluisasta WordPress-varoitusvirheestä Varoitus: otsikkotietoja ei voi muokata – pluggable.php:n jo lähettämät otsikot (otsikkotietoja ei voi muuttaa). Jos olet yksi niistä, jotka kohtaavat tämän virheen, olet tullut oikeaan paikkaan. Tässä käsittelemme syytä, miksi tämä virhe ilmestyy alun perin, ja tarkastelemme ratkaisuja, jotka ratkaisevat ongelman pysyvästi.

Mitä tarvitset

Ennen kuin aloitat, varmista, että sinulla on seuraavat asiat:

  • Pääsy hosting-ohjauspaneeliin tai FTP-käyttöön

Miten otsikkotietoja ei voi muokata – jo virheellisesti lähetetyt otsikot ilmestyvät?

Katsotaanpa esimerkkiä tästä virheestä ymmärtääksemme syitä paremmin. Virhe näkyy yleensä tässä muodossa:

Varoitus: Otsikkotietoja ei voi muokata - otsikot ovat jo lähettäneet (tulostus aloitettiin osoitteesta /public_html/wp-content/plugins/my-plugin/my-function.php:#) tiedostossa /public_html/wp-includes/pluggable.php rivillä #

Kuten näet, virhe mainitsee kaksi tiedostoa. Ensimmäinen tiedosto (meidän tapauksessamme: my-function.php lähetetty sisään /public_html//wp-content/plugins/my-plugin/) epäiltyjen johdossa. Tämä on mukautettu koodimme, joka on suunniteltu muokkaamaan WordPressin tarjoamia ydintoimintoja. Ydintoiminto on tiedostossa pluggable.php(WordPress-ydintiedosto, muuttumaton millekään WordPress-asennukset). Toisin sanoen ongelma on ensimmäisessä tiedostossa, mikä estää toista tiedostoa toimimasta kunnolla.

Virheen pääsyy on tarpeeton välilyönnit ensimmäisessä tiedostossa. Nämä ovat välilyöntejä tiedoston ylä- tai alaosassa, tarpeettomia välilyöntejä missä tahansa tiedostossa tai jopa välilyöntejä PHP-tageissa . Muuten, koska ohjelmoijat voivat (ja yleensä tekevät) vahingossa lisätä ylimääräisiä välilyöntejä koodiinsa, tämä virhe ilmenee useammin kuin saatat odottaa. Virheilmoituksessa oleva #-rivi viittaa ongelman sijaintiin - tämä auttaa ratkaisemaan ongelman nopeammin ja vaivattomasti.

Virheen korjaaminen ei voi muuttaa otsikkotietoja - otsikot ovat jo lähettäneet

Nyt kun tiedät, mikä virheen aiheuttaa, voit jatkaa sen korjaamista. Näytämme sinulle kaksi vaihtoehtoa ongelman korjaamiseksi, joita voit kokeilla yksitellen tai vuorotellen, jos yksittäinen ei auta.

Vaihtoehto 1 – Viallisen tiedoston muokkaaminen

Ensimmäinen ratkaisu virheeseen Varoitus: otsikkotietoja ei voi muokata– virheellisen tiedoston manuaalinen korjaus. Sinulla on se jo varastossa tarvittavat tiedot, löytääksesi ongelman itse virheilmoituksesta (muista, että tämä on viestin ensimmäinen tiedosto). Sinun tarvitsee vain avata tämä tiedosto FTP:n kautta käyttämällä asiakasohjelmaa, kuten FileZilla, tai tiedostonhallinnan kautta.

Pohjimmiltaan kaikki, mitä tässä on huolehdittava, on ylimääräisten välilyöntien / tyhjien rivien poistaminen tiedostosta. Hyvä paikka aloittaa on virheilmoituksessa mainittu rivi #. Tästä eteenpäin voit jatkaa tiedoston muun osan jäsentämistä ja etsiä muita tarpeettomia välilyöntejä tai tyhjiä rivejä aina asiakirjan loppuun asti.

Varmista, että kirjoitat alku- ja loppusanat oikein. PHP tunnisteet. Tunnisteen edessä tai jälkeen ei saa olla välilyöntiä , sekä tag ?> . Myöskään koodin viimeinen rivi ei saa päättyä välilyöntiin tai ylimääräiseen rivinsyöttöön.

Alla olevassa kuvakaappauksessa näet tiedoston wp-config.php, jossa on välilyönnit ennen ensimmäistä PHP-tagia.


VINKKI: Monet tekstieditorit voivat poistaa tarpeettomat välilyönnit automaattisesti. Jos esimerkiksi haluat poistaa ylimääräisiä välilyöntejä Atom-editorissa, korosta kaikki koodi ja siirry kohtaan P ackages -> Välilyönti -> Poista perässä oleva välilyönti.

Vaihtoehto 2 – Vaihda viallinen tiedosto

Tietenkin useiden virheellisten tiedostojen muokkaaminen voi olla vaikeaa. Tiedostot voivat liittyä laajennukseen tai teemaan, jonka olet juuri asentanut sivustollesi, tai ne voivat olla jopa WordPress-ydintiedostoja.

Jos virhe todellakin johtuu laajennuksesta tai teemasta, sinun tarvitsee vain asentaa se uudelleen. Tämä toimenpide auttaa useimmissa tapauksissa. Toisaalta, jos WordPress-ydintiedosto on syynä virheeseen, paras ratkaisu on ottaa puhdas kopio WordPressistä ja korvata asennuksessasi virheellinen tiedosto samalla oikealla versiolla. Tämä varmistaa, että viallinen tiedosto palautetaan alkutila, kun taas muu WordPress-sivustosi asennus pysyy ennallaan. Lataa nyt sivu uudelleen ja varmista, että virhe on korjattu.

Tiivistettynä

Liititpä sitten koodinpätkän tiedostoon, lisäsit uuden laajennuksen/teeman tai kirjoitit koodin manuaalisesti, tiedostoon saattaa tulla ylimääräisiä välilyöntejä. Nämä näennäisesti viattomat tilat voivat muuttua WordPress-virheiksi Varoitus: otsikkotietoja ei voi muokata – otsikot on jo lähettänyt.

Tässä oppaassa tarkastelimme tällaisten virheiden korjaamista, ja nyt sivustosi toimii taas odotetusti. Lisää WordPress-opetusohjelmia löydät täältä.

Tekijä

Elenalla on alan ammatillinen tekninen koulutus tietotekniikat ja kokemusta ohjelmoinnista eri kielillä eri alustoille ja järjestelmille. Hän on omistanut yli 10 vuotta verkkoteollisuudelle ja työskennellyt sen kanssa eri CMS, kuten: Drupal, Joomla, Magento ja tietysti tämän päivän suosituin sisällönhallintajärjestelmä - WordPress. Hänen artikkelinsa ovat aina teknisesti varmennettuja ja tarkkoja, olipa kyseessä sitten WordPress-arvostelu tai VPS-palvelimesi asennusohjeet.

Eräänä päivänä, kun kävin blogissani, yllätyin havaitessani käsittämättömän virheen, kuten:

Varoitus: Otsikkotietoja ei voi muokata – otsikot on jo lähettänyt (tulostus alkoi /xxxxxxxx/wp-config.php:1)

Lisäksi ei ole mahdollista päästä hallintapaneeliin. Menin heti tarkistamaan, mikä wp-config.php-tiedostossa oli vialla. Kaikki oli paikallaan, tietokannan salasanat olivat oikein. Luulin, että se oli taas hakkeroitu)) Mutta jälleen kerran, FTP:ssä ei havaittu ilkivallan merkkejä. Outointa (tämä hämmentyi lopulta täysin) oli, että vain linkki sivulle ilman www-osoitetta ei toiminut tai päinvastoin (en muista tarkalleen). Aloin ottaa yhteyttä isännöitsijään ja katsoa asetuksia verkkotunnuksen hallintapaneelissa - yleensä paljon.

Mutta se osoittautui paljon yksinkertaisemmiksi - konfigurointitiedoston alussa oli tietty tuoteluettelo— merkki (allekirjoitus) UTF-8-tiedostoille. Siksi yllä oleva virhe ponnahti. Jotta tämä ei tapahdu sinulle, sinun on ensin käytettävä koodieditoreja, jotka joko eivät laita tätä allekirjoitusta ollenkaan tai ennen tiedoston tallentamista selvittävät, tarvitaanko sitä.

Joidenkin tekstieditorien asetuksista saattaa löytyä "Sisällytä Unicode Signature (BOM)"-, "Add Byte Order Mark" tai vastaava valintaruutu. Muussa tapauksessa ei ole suositeltavaa käyttää sitä ilman, että voit poistaa tarpeettomia vaihtoehtoja tietyssä ohjelmassa. Erikoistuneilta foorumeilta löydät luettelon hyvistä tekstieditorit, Tämä - Notepad2, PSPad, UnicEdit, Notepad++. Yleensä jälkimmäisestä kirjoitetaan paljon; se on melko tehokas työkalu. Jotenkin sattumalta minulla oli vaihtoehtoinen editori saatavilla tietokoneellani - Akelpad– Käytän sitä vastaaviin tehtäviin.

Toinen huomionarvoinen seikka on, että tuoteluettelon virhe ei voi tapahtua vain wp-config.php-tiedostossa. Lisäksi, jos varoitusten näyttö on poistettu käytöstä, et näe ollenkaan, mihin ongelma on hiipinyt. Tällaisissa tapauksissa (ja kaikissa muissa) suosittelen käyttämään yksinkertaista skripti tiedostojen etsimiseen tuoteluettelon avulla. Juri Belotitskya tulee kiittää kehityksestä.

Skriptin käyttö on hyvin yksinkertaista.

  1. vaadittu tiedosto
  2. Kaada se päälle FTP-palvelin juurihakemistoon. Jos WordPress ei ole asennettuna sivuston juureen (mutta esimerkiksi blogikansioon), skripti on sijoitettava siihen hakemistoon, jossa WordPress sijaitsee, ja ajettava sieltä.
  3. Käynnistys on hyvin yksinkertaista - kirjoita selaimesi osoitepalkkiin linkki http://your.site/find_bom.php

Tämän seurauksena saat luettelon viallisista tiedostoista. Muuten, työn nopeuttamiseksi komentosarja tarkistaa vain ne hakemistot, joihin käyttäjät yleensä lataavat tiedostoja - root, /wp-content/themes ja /wp-content/plugins.

Siinä se periaatteessa on. Kuinka vaikeaa olikaan ratkaista näin yksinkertainen ongelma. Toivottavasti auttoin sinua hieman kokemuksellani, ja nyt kun vastaava varoitus tulee näkyviin, tiedät mitä tehdä :) Jos et pysty korjaamaan yhtä tai toista tiedostoa tuoteluettelosta, voit ladata uuden tiedoston WordPress-jakelu.

P.S. Vastaparille sopiva paikka on juhlien järjestäminen ja kaikkien häihin liittyvien asioiden ratkaiseminen.

Tässä artikkelissa tarkastellaan tärkeimpiä syitä ja ratkaisuja virheeseen "Otsikot on mahdotonta muuttaa, koska ne on jo lähetetty" ("Otsikkotietoja ei voi muokata – otsikot on jo lähettänyt").

Mitä tämä virhe tarkoittaa?

Ymmärtääksesi virheen syyt, sinun on ensin ymmärrettävä, mitä nämä "otsikot" ovat.

Älä mene syvälle teoriaan. Sanotaan vaikka, että ennen kuin joku käyttäjä avaa verkkosivun, hänelle lähetetään samat "otsikot", jotka sisältävät koodauksen, sivuston kielen, palvelintiedot ja muut palvelutiedot. On myös syytä lisätä erikseen, että evästeet ja istunto lähetetään myös otsikoissa.

Mitkä komennot aiheuttavat tämän virheen?

Virhe "Ylätunnistetietoja ei voi muokata - otsikot on jo lähettänyt" voi kutsua PHP-komentoja, kuten header , setcookie ja muita, jotka liittyvät evästeiden tai istuntojen toimintaan.

Virheen syyt ja ratkaisut.

Eniten yleinen virhe tapahtuu kokemuksen puutteen vuoksi. Olemme jo havainneet, että otsikot lähetetään ennen kuin sivu itse alkaa latautua.

Mutta ohjelmoijat, varsinkin aloittelijat, yksinkertaisesti unohtavat tai eivät edes tiedä tämän. Ja ensin he yrittävät näyttää jotain sivulla - useimmiten käyttämällä echo-komentoa, ja sitten he asettavat evästeitä, lähettävät otsikoita jne. Mikä johtaa juuri tähän virheeseen.

Tässä on esimerkki koodista, joka johtaisi tähän virheeseen:

Tässä on oikea vaihtoehto:

Eli ensinnäkin et voi näyttää mitään ennen otsikoiden lähettämistä!

Se ei ole aina ilmeistä, mutta siinä on virhe pienellä erolla. Tällöin PHP-dokumenttisi alkaa välilyönneillä tai tyhjillä riveillä, mikä tarkoittaa, että nämä rivit näkyvät selaimessa.

Tätä voi olla erittäin vaikea valvoa, koska esimerkiksi Windows-muistilehtiö voi lisätä alkuun tavujärjestysmerkin varoittamatta meitä millään tavalla tai edes näyttämättä tätä symbolia. Tässä tapauksessa sinun tulee avata asiakirja muilla muokkausohjelmilla ja tarkistaa.

Tässä on esimerkki otsikoiden asettamisesta väärin:

Eli toiseksi ennen

Sinun tulee olla erityisen varovainen, jos käytät include-komentoa, sillä se yhdistää kaikki tiedostot ja tekee niistä yhden, ja jos sisällytit ensin sivuston otsikon (liukusäädin, valikko jne.) ja yrität sitten lähettää otsikot päätiedostoon. , niin saat Tietenkin saat tämän virheen.

Tässä on esimerkki tällaisesta virheellisestä koodista: