PHP में HTTP रिस्पॉन्स हेडर की समस्या
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>