PHP: Kā izvairīties no “headers already sent”

1267802781-bom2.jpgŠ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!
Padalies