HTTP պատասխանի վերնագրերի խնդիրը PHP-ում
HTTP կանոններով նախ ուղարկվում են
HTTP վերնագրերը, ապա՝ HTTP պատասխանի մարմինը:
Սրա պատճառով PHP-ի header
ֆունկցիայի հետ աշխատանքն ունի իր առանձնահատկությունները:
Բանը նրանում է, որ եթե այս ֆունկցիան կանչելուց առաջ
էկրանին ինչ-որ արտածում կլինի,
այն կմեկնաբանվի որպես պատասխանի մարմնի սկիզբ:
Այս դեպքում header ֆունկցիայի կանչը
կհանգեցնի PHP-ի նախազգուշացման՝
headers already sent տեքստով:
Այդ դեպքում վերնագրերը գուցե նույնիսկ ուղարկվեն:
Նույնիսկ գուցե սխալը չարտածվի (կախված է
PHP-ի կարգավորումներից): Բայց ամենից հաճախ դա տեղի կունենա միայն
լոկալ մեքենայում, իսկ կայքը ինտերնետում տեղադրելու դեպքում
ամեն ինչ կվերանա:
Էկրանին արտածում ասելով նկատի է ունեցվում ցանկացած տեքստ: Օրինակ, այսպես.
տեքստ
<?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>
տեքստ
<body>
<html>