PHP жауап HTTP тақырыпшалары мәселесі

HTTP ережелері бойынша алдымен HTTP тақырыпшалары жіберіледі, содан кейін HTTP жауабының денесі. Осы себепті PHP-тегі header функциясымен жұмыс ерекшеліктерге ие.

Мәселе мынада, егер бұл функцияны шақырмас бұрын экранға қандай да бір шығарылым болса, ол жауап денесінің басы ретінде қарастырылады. Бұл жағдайда header функциясын шақыру PHP-тің ескертуін тудырады, мәтіні headers already sent. Сонда да тақырыпшалар жіберілуі мүмкін. Тіпті қате де шығарылмауы мүмкін (PHP баптауларына байланысты). Бірақ көбінесе бұл тек жергілікті серверде болады, ал сайтты интернетке шығарған кезде бәрі бұзылады.

Экранға шығарылым деп кез келген мәтін түсініледі. Мысалы, былай:

phpмәтін
<?php
  header('Content-Type: text/html');
?>

Немесе бос жол:

php     
<?php
  header('Content-Type: text/html');
?>

Немесе бос орын:

php <?php
  header('Content-Type: text/html');
?>

Немесе тег:

html<div>
  <?php
    header('Content-Type: text/html');
  ?>
</div>

Немесе echo арқылы шығарылым:

php<?php
  echo 'abc';
  header('Content-Type: text/html');
?>

Немесе var_dump арқылы шығарылым:

php<?php
  $str = 'abc';
  var_dump($str);
  
  header('Content-Type: text/html');
?>

Тіпті PHP ескертулері де экранға шығарылым болады. Келесі мысалда әдейі жоқ айнымалыға сілтеме жасалады, бұл ескертудің шығарылуына әкеледі:

php<?php
  $text += 1;
  header('Content-Type: text/html');
?>

PHP жақшаларын ашу да экранға шығарылым туғызады:

php<?php
  echo 'abc';
?>
<?php
  header('Content-Type: text/html');
?>
Задание 1

header функциясынан бұрын әдейі экранға шығарылым жасаңыз. Пайда болған қатенің мәтінін зерттеңіз.

Задание 2

Мына кодта жіберілген қатені түзеңіз:

html<!DOCTYPE html>
<html>
  <head>
    <?php
      header('Content-Type: text/html');
    ?>
  </head>
  <body>
    мәтін
  <body>
<html>