PHP: Kā izvairīties no “headers already sent”
- 5. mar 2010 17:56 / Lasīts 1159x
- 0 komentāri
- Webdev
Šajā rakstā pastāstīšu, kā izvairīties un cīnīties ar šo PHP brīdinājumu - Warning: Cannot modify header information - headers already sent by...Vairumā gadījumu šī kļūda rodas kad jau ir notikusi izvade pirms header() funkcijas izmantošanas. Bet ir arī otrs gadījums - sesijas startēšana pēc izvades. Iedalīsim šos gadījumus pirmajā un otrajā.
Pirmais gadījums
Pie pirmā gadījuma sīkāk pieder jau pieminētā izvade pirms header() funkcijas izmantošanas un skripti, kas saglabāti UTF-8 kodējumā ar BOM (Byte order mask) simboliem.
Risinājums: Neizvadi neko pirms header() funkcijas izmantošanas un glabā skripta failus UTF-8 kodējumā bez BOM simboliem. Šos simbolus var noņemt ar dažādiem koda editoriem, piemēram, Notepad++, vai jebkuru HEX editoru, nodzēs faila sākumā EF BB BF simbolus.
Nepareizi:
<html>
<head>
<title>Niknais.Lv</title>
</head>
<body>
<?php
if(1 == 1) {
header('Location: http://google.lv/');
exit;
}
?>
Lapas contents šeit...
</body>
</html>Pareizi:
<?php
if(1 == 1) {
header('Location: http://google.lv/');
exit;
}
?>
<html>
<head>
<title>Niknais.Lv</title>
</head>
<body>
Lapas contents šeit...
</body>
</html>Otrais gadījums
Otrajā gadījumā piederās jau iepriekš minētā sesiju startēšana pēc izvades.
Nepareizi:
<html> <head> <title>Niknais.Lv</title> </head> <body> <?php session_start(); //Piestartējam sesiju un mēģinam rīkoties, bet nekā... ?> Lapas contents šeit... </body> </html>
Pareizi:
<?php session_start(); //Heijāā... ?> <html> <head> <title>Niknais.Lv</title> </head> <body> Lapas contents šeit... </body> </html>
Ceru, ka visu sapratāt.
0 komentāri
Lai pievienotu komentāru, tev ir jābūt autorizētam lietotājam! Reģistrējies, vai ienāc!




