PHP හි HTTP ප්රතිචාර ශීර්ෂක සමඟ ඇති ගැටලුව
HTTP නීති රීති අනුව, පළමුව
HTTP ශීර්ෂක යවනු ලබන අතර පසුව HTTP ප්රතිචාරයේ ඇතුළත යවනු ලැබේ.
එමනිසා, PHP හි header ශ්රිතය සමඟ වැඩ කිරීමේදී
එහිම විශේෂාංග ඇත.
කාරණය නම්, මෙම ශ්රිතය අමතන්නට පෙර
තිරයට කිසියම් ප්රතිදානයක් තිබේ නම්,
එය ප්රතිචාරයේ ආරම්භය ලෙස අර්ථ දක්වනු ලැබේ. මෙම අවස්ථාවේ දී,
header ශ්රිතය ඇමතීම
headers already sent යන පාඨය සමඟ
PHP අනතුරු ඇඟවීමකට හේතු වේ.
එසේ වුවද, ශීර්ෂක යවා ඇතිවා විය හැකිය.
දෝෂය පවා පෙන්වන්නේ නැතිවා විය හැකිය (PHP
සැකසුම් මත රඳා පවතී). නමුත් බොහෝ විට මෙය වන්නේ
ප්රාදේශිය සේවාදායකයේ පමණක් වන අතර, වෙබ් අඩවිය අන්තර්ජාලයට පළ කළ විට
සියල්ල කැඩී යනු ඇත.
තිරයට ප්රතිදානය යනුවෙන් අදහස් කරන්නේ ඕනෑම පෙළකි. උදාහරණයක් ලෙස, මෙහෙම:
text
<?php
header('Content-Type: text/html');
?>
හෝ හිස් පේළියක්:
<?php
header('Content-Type: text/html');
?>
හෝ අවකාශයක්:
<?php
header('Content-Type: text/html');
?>
හෝ ටැගයක්:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
හෝ echo හරහා ප්රතිදානය:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
හෝ var_dump හරහා ප්රතිදානය:
<?php
$str = 'abc';
var_dump($str);
header('Content-Type: text/html');
?>
PHP අනතුරු ඇඟවීම් පවා තිරයට ප්රතිදානය වනු ඇත. පහත උදාහරණයේ අරමුණින්ම නොපවතින විචල්යයකට ප්රවේශ වේ, එය අනතුරු ඇඟවීම් ප්රතිදානය කිරීමට හේතු වේ:
<?php
$text += 1;
header('Content-Type: text/html');
?>
PHP වරහන් කඩා දැමීම ද තිරයට ප්රතිදානය ජනනය කරයි:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
header ශ්රිතයට පෙර
තිරයට ප්රතිදානයක් සජීවීව සාදන්න.
සිදුවන දෝෂයේ පාඨය අධ්යයනය කරන්න.
මෙම කේතයේදී සිදු කරන ලද දෝෂය නිවරදි කරන්න:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
text
<body>
<html>