Problēma ar HTTP atbildes galvenēm PHP
Saskaņā ar HTTP noteikumiem vispirms tiek nosūtītas
HTTP galvenes un tad HTTP atbildes saturs.
Šī iemesla dēļ darbam ar funkciju header
PHP ir savas īpatnības.
Lieta tāda, ka, ja pirms šīs funkcijas izsaukšanas
būs kāda izvade uz ekrānu,
tā tiks interpretēta kā atbildes
satura sākums. Šajā gadījumā funkcijas
header izsaukšana novedīs
pie PHP brīdinājuma ar tekstu
headers already sent.
Tomēr, iespējams, ka galvenes pat tiks nosūtītas.
Iespējams, ka pat kļūda netiks parādīta (atkarīgs no
PHP iestatījumiem). Bet visbiežāk tas notiks tikai
lokālajā vidē, bet, izvietojot vietni internetā,
vis sabojāsies.
Ar izvadi uz ekrānu saprot jebkuru tekstu. Piemēram, šādi:
teksts
<?php
header('Content-Type: text/html');
?>
Vai tukša rinda:
<?php
header('Content-Type: text/html');
?>
Vai atstarpe:
<?php
header('Content-Type: text/html');
?>
Vai tags:
<div>
<?php
header('Content-Type: text/html');
?>
</div>
Vai izvade ar echo:
<?php
echo 'abc';
header('Content-Type: text/html');
?>
Vai izvade ar var_dump:
<?php
$str = 'abc';
var_dump($str);
header('Content-Type: text/html');
?>
Pat PHP brīdinājumi būs izvade uz ekrānu. Nākamajā piemērā tīši tiek piekļūts neesošam mainīgajam, kas novedīs pie brīdinājuma izvades:
<?php
$text += 1;
header('Content-Type: text/html');
?>
PHP iekavu pārtraukumi arī rada izvadi uz ekrānu:
<?php
echo 'abc';
?>
<?php
header('Content-Type: text/html');
?>
Tīši izveidojiet izvadi uz ekrānu
pirms funkcijas header.
Izpētiet radušās kļūdas tekstu.
Izlabojiet kļūdu, kas pieļauta šajā kodā:
<!DOCTYPE html>
<html>
<head>
<?php
header('Content-Type: text/html');
?>
</head>
<body>
teksts
<body>
<html>