PHP'de HTTP Yanıt Başlıkları ile İlgili Sorun

HTTP kurallarına göre, önce HTTP başlıkları gönderilir, ardından HTTP yanıt gövdesi gelir. Bu nedenle, PHP'de header işleviyle çalışmanın kendine özgü özellikleri vardır.

Olay şu ki, bu işlevi çağırmadan önce ekrana herhangi bir çıktı yapılırsa, bu çıktı yanıt gövdesinin başlangıcı olarak yorumlanır. Bu durumda header işlevini çağırmak, headers already sent (başlıklar zaten gönderildi) metniyle bir PHP uyarısına yol açacaktır. Bu esnada başlıklar yine de gönderilebilir. Hatta hata bile görüntülenmeyebilir (PHP ayarlarına bağlıdır). Ama çoğu zaman bu sadece local ortamda (lokalde) olur, site internete çıkarıldığında ise her şey bozulur.

Ekrana çıktı yapmak denildiğinde, herhangi bir metin kastedilir. Örneğin, şu şekilde:

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

Veya boş bir satır:

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

Veya bir boşluk:

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

Veya bir etiket:

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

Veya echo ile çıktı:

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

Veya var_dump ile çıktı:

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

PHP uyarıları bile ekrana çıktı olarak sayılır. Aşağıdaki örnekte kasıtlı olarak var olmayan bir değişkene erişiliyor, bu da bir uyarı çıktısına yol açacak:

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

PHP etiketlerinin arasına girilen boşluklar/çıktılar da ekrana çıktı üretir:

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

header işlevinden önce kasıtlı olarak ekrana çıktı oluşturun. Ortaya çıkan hatanın metnini inceleyin.

Задание 2

Bu kodda yapılan hatayı düzeltin:

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