PHPдегин HTTP жооп баш тамгалары менен болгон маселе

HTTP эрежелери боюнча, алгач HTTP баш тамгалары жөнөтүлөт, андан кийин HTTP жообунун денеси. Бул себептен, PHPдеги header функциясы менен иштөө өзгөчөлүктөргө ээ.

Маселе мында, эгерде бул функцияны чакырганга чейин экранга кандайдыр бир чыгаруу болсо, ал жооптун денесинин башы катары чечмеленет. Бул учурда header функциясын чакыруу headers already sent деген текст менен PHPдин эскертүүсүнө алып келет. Бул учурда баш тамгалар жиберилиши мүмкүн. Жана ката да чыкпашы мүмкүн (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>