PHP में HTTP रिस्पॉन्स हेडर की समस्या

HTTP नियमों के अनुसार, पहले HTTP हेडर भेजे जाते हैं, और उसके बाद HTTP रिस्पॉन्स का बॉडी भाग। इस वजह से PHP में header फ़ंक्शन के साथ काम करने की अपनी विशेषताएं हैं।

बात यह है कि अगर इस फ़ंक्शन को कॉल करने से पहले स्क्रीन पर कुछ आउटपुट होगा, तो उसे रिस्पॉन्स के बॉडी की शुरुआत माना जाएगा। इस स्थिति में header फ़ंक्शन का कॉल PHP चेतावनी का कारण बनेगा जिसका टेक्स्ट होगा headers already sent. ऐसा होने पर हेडर शायद भेजे भी जाएं। शायद त्रुटि भी न दिखे (PHP की सेटिंग्स पर निर्भर करता है)। लेकिन अक्सर ऐसा सिर्फ लोकल मशीन पर होगा, और जब साइट को इंटरनेट पर डिप्लॉय किया जाएगा तो सब कुछ टूट जाएगा।

स्क्रीन पर आउटपुट का मतलब कोई भी टेक्स्ट है। उदाहरण के लिए, इस तरह:

phpटेक्स्ट
<?php
  header('Content-Type: text/html');
?>

या खाली लाइन:

php     
<?php
  header('Content-Type: text/html');
?>

या स्पेस:

php <?php
  header('Content-Type: text/html');
?>

या टैग:

html<div>
  <?php
    header('Content-Type: text/html');
  ?>
</div>

या echo के माध्यम से आउटपुट:

php<?php
  echo 'abc';
  header('Content-Type: text/html');
?>

या var_dump के माध्यम से आउटपुट:

php<?php
  $str = 'abc';
  var_dump($str);
  
  header('Content-Type: text/html');
?>

PHP चेतावनियाँ भी स्क्रीन आउटपुट मानी जाएंगी। निम्नलिखित उदाहरण में जानबूझकर एक गैर-मौजूदा वेरिएबल का उपयोग किया गया है, जिसके कारण एक चेतावनी का आउटपुट होगा:

php<?php
  $text += 1;
  header('Content-Type: text/html');
?>

PHP कोड ब्लॉक के बीच में खाली जगह (ब्रेक) भी स्क्रीन आउटपुट उत्पन्न करती है:

php<?php
  echo 'abc';
?>
<?php
  header('Content-Type: text/html');
?>
Задание 1

जानबूझकर header फ़ंक्शन से पहले स्क्रीन आउटपुट उत्पन्न करें। उत्पन्न होने वाली त्रुटि के टेक्स्ट का अध्ययन करें।

Задание 2

इस कोड में की गई गलती को सही करें:

html<!DOCTYPE html>
<html>
  <head>
    <?php
      header('Content-Type: text/html');
    ?>
  </head>
  <body>
    टेक्स्ट
  <body>
<html>