PHP හි HTTP ප්‍රතිචාර ශීර්ෂක සමඟ ඇති ගැටලුව

HTTP නීති රීති අනුව, පළමුව HTTP ශීර්ෂක යවනු ලබන අතර පසුව HTTP ප්‍රතිචාරයේ ඇතුළත යවනු ලැබේ. එමනිසා, PHP හි header ශ්‍රිතය සමඟ වැඩ කිරීමේදී එහිම විශේෂාංග ඇත.

කාරණය නම්, මෙම ශ්‍රිතය අමතන්නට පෙර තිරයට කිසියම් ප්‍රතිදානයක් තිබේ නම්, එය ප්‍රතිචාරයේ ආරම්භය ලෙස අර්ථ දක්වනු ලැබේ. මෙම අවස්ථාවේ දී, header ශ්‍රිතය ඇමතීම headers already sent යන පාඨය සමඟ PHP අනතුරු ඇඟවීමකට හේතු වේ. එසේ වුවද, ශීර්ෂක යවා ඇතිවා විය හැකිය. දෝෂය පවා පෙන්වන්නේ නැතිවා විය හැකිය (PHP සැකසුම් මත රඳා පවතී). නමුත් බොහෝ විට මෙය වන්නේ ප්‍රාදේශිය සේවාදායකයේ පමණක් වන අතර, වෙබ් අඩවිය අන්තර්ජාලයට පළ කළ විට සියල්ල කැඩී යනු ඇත.

තිරයට ප්‍රතිදානය යනුවෙන් අදහස් කරන්නේ ඕනෑම පෙළකි. උදාහරණයක් ලෙස, මෙහෙම:

phptext
<?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>
    text
  <body>
<html>