Tatizo na Vichwa vya Majibu ya HTTP katika PHP

Kulingana na sheria za HTTP, kwanza hutumwa vichwa vya HTTP, kisha mwili wa majibu ya HTTP. Kwa sababu hii, kufanya kazi na kitendakazi header katika PHP ina sifa zake maalum.

Jambo ni kwamba ikiwa kabla ya kuita kitendakazi hiki kutakuwa na mazao yoyote kwenye skrini, yatatafsiriwa kama mwanzo wa mwili wa majibu. Katika kesi hii, kuita kitendakazi header kutasababisha onyo la PHP lenye maandishi headers already sent. Wakati huo huo, vichwa vinaweza hata kutuma. Hata hitilafu inaweza isitoke (inategemea mipangilio ya PHP). Lakini mara nyingi hii itakuwa tu kwenye mtandao wa ndani, na wakati tovuti itakapowekwa kwenye wavuti kila kitu kitiharibika.

Kwa mazao kwenye skrini inamaanishwa maandishi yoyote. Kwa mfano, hivi:

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

Au mstari tupu:

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

Au nafasi:

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

Au tagi:

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

Au mazao kupitia echo:

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

Au mazao kupitia var_dump:

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

Hata onyo la PHP litakuwa mazao kwenye skrini. Katika mfano ufuatao kwa makusudi kuna mawasiliano na mabadiliko yasiyopo, ambayo itasababisha mazao ya onyo:

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

Kuvunja mabano ya PHP pia hutengeneza mazao kwenye skrini:

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

Kwa makusudi unda mazao kwenye skrini kabla ya kitendakazi header. Chunguza maandishi ya hitilafu inayojitokeza.

Задание 2

Sahihisha hitilafu, iliyofanywa katika msimbo huu:

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