HTTP პასუხის სათაურების პრობლემა PHP-ში
HTTP-ის წესების მიხედვით, ჯერ იგზავნება
HTTP სათაურები და შემდეგ HTTP პასუხის სხეული.
ამის გამო, ფუნქცია header-თან
მუშაობას PHP-ში აქვს თავისი თავისებურებები.
საქმე ისაა, რომ თუ ამ ფუნქციის გამოძახებამდე
რაიმე გამოტანა იქნება ეკრანზე,
ის განიხილება როგორც პასუხის
სხეულის დასაწყისი. ამ შემთხვევაში
ფუნქციის header გამოძახება
გამოიწვევს PHP-ის გაფრთხილებას ტექსტით
headers already sent.
ამ შემთხვევაში სათაურები შეიძლება გაიგზავნოს.
შეიძლება შეცდომაც კი არ გამოჩნდეს (დამოკიდებულია
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>