PHP-də HTTP Cavab Başlıqları Problemi
HTTP qaydalarına görə, əvvəlcə
HTTP başlıqları göndərilir, sonra isə HTTP cavabının gövdəsi.
Buna görə də PHP-də header funksiyası ilə işin
özünəməxsus xüsusiyyətləri var.
Məsələ ondadır ki, əgər bu funksiya çağırılmazdan əvvəl
ekrana hər hansı bir çıxış olarsa,
o, cavab gövdəsinin başlanğıcı kimi şərh ediləcək.
Bu halda header funksiyasının çağırılması
headers already sent mətnli
PHP xəbərdarlığına səbəb olacaq.
Bu zaman başlıqlar hətta göndərilə bilər.
Hətta səhv də çıxmayabilər (PHP parametrlərindən asılı olaraq).
Lakin çox zaman bu yalnız lokal mühitdə baş verər,
sayt internetə çıxarılanda isə hər şey pozular.
Ekrana çıxış dedikdə istənilən mətn nəzərdə tutulur. Məsələn, belə:
text
<?php
header('Content-Type: text/html');
?>
Və ya boş sətir:
<?php
header('Content-Type: text/html');
?>
Və ya boşluq:
<?php
header('Content-Type: text/html');
?>
Və ya teq:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
Və ya echo vasitəsilə çıxış:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
Və ya var_dump vasitəsilə çıxış:
<?php
$str = 'abc';
var_dump($str);
header('Content-Type: text/html');
?>
Hətta PHP xəbərdarlıqları da ekrana çıxış sayılacaq. Aşağıdakı nümunədə qəsdən mövcud olmayan dəyişənə müraciət edilir, bu da xəbərdarlığın çıxmasına səbəb olacaq:
<?php
$text += 1;
header('Content-Type: text/html');
?>
PHP mötərizələrinin arasına başqa kod yazılması da ekrana çıxış yaradır:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
header funksiyasından əvvəl qəsdən
ekrana çıxış yaradın.
Yaranan səhvin mətnini öyrənin.
Bu koddakı səhvi düzəldin:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
text
<body>
<html>