Проблема со заглавките на 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>