PHP में "Headers already sent" एरर कैसे ठीक करें: चरण-दर-चरण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

मिलिए "Headers already sent" से — आपका नया दुश्मन (और दोस्त)

\n\n

अगर आपने कभी PHP में कोड लिखा है, तो आपने यह एरर ज़रूर देखी होगी। यह अचानक आती है, अक्सर सबसे गलत समय पर — जब आप अपना स्क्रिप्ट लगभग पूरा कर चुके होते हैं। यह संदेश डरावना, लाल रंग का होता है, और ऐसा लगता है जैसे पूरा कोड टूट गया है। लेकिन असल में, यह PHP की सबसे उपयोगी एरर में से एक है। यह आपको HTTP प्रोटोकॉल के साथ सही तरीके से काम करना सिखाती है।

\n\n

इस ट्यूटोरियल में, हम समझेंगे कि Headers already sent एरर क्यों आती है, इसका निदान कैसे करें, और सबसे महत्वपूर्ण बात — इसे हमेशा के लिए कैसे ठीक करें। हम सिर्फ Stack Overflow से जवाब कॉपी नहीं करेंगे — हम असली समस्या को समझेंगे। चलिए शुरू करते हैं!

\n\n

HTTP हेडर क्या हैं और PHP उन पर क्यों भड़कती है?

\n\n

इलाज करने से पहले, शरीर रचना को समझना ज़रूरी है। जब PHP ब्राउज़र को रिस्पॉन्स भेजती है, तो वह इसे दो चरणों में करती है:

\n\n
    \n
  • पहले — हेडर (headers)। यह मेटा जानकारी है: कंटेंट टाइप (Content-Type), एन्कोडिंग, कुकीज़, रिस्पॉन्स स्टेटस (200 OK, 404 Not Found)।
  • \n
  • फिर — रिस्पॉन्स बॉडी (body)। यह असली HTML, टेक्स्ट, JSON है — जो यूज़र देखता है।
  • \n
\n\n

समस्या यह है कि PHP बॉडी भेजना शुरू करने के बाद हेडर नहीं भेज सकता। अगर आप एक भी कैरेक्टर (यहां तक कि एक स्पेस) आउटपुट करने के बाद header() कॉल करने की कोशिश करते हैं, तो PHP यह एरर देगा:

\n\n
Warning: Cannot modify header information - headers already sent by (output started at /path/to/file.php:12)
\n\n

यही पूरा जादू है। यह एरर घातक नहीं है — यह सिर्फ चेतावनी देती है कि आपका header() काम नहीं करेगा। लेकिन इसके गंभीर परिणाम हो सकते हैं: रीडायरेक्ट नहीं होगा, कुकी सेट नहीं होगी, JSON रिस्पॉन्स टूट जाएगा।

\n\n

यह एरर आने के टॉप-5 कारण

\n\n

आइए सबसे आम परिदृश्यों को समझते हैं। क्या आपको अपनी स्थिति दिखती है?

\n\n

1. <?php से पहले स्पेस या खाली लाइन

\n\n

यह क्लासिक केस है। आप फ़ाइल खोलते हैं, और ओपनिंग टैग <?php से पहले एक स्पेस, खाली लाइन या BOM (Byte Order Mark) कैरेक्टर होता है। PHP इस कैरेक्टर को आउटपुट का हिस्सा मान लेती है — और फिर शुरू हो जाती है समस्या।

\n\n
// ❌ गलती: <?php से पहले स्पेस\n <?php\nheader('Location: /new-page.php');\n?>
\n\n
// ✅ सही: <?php से पहले कोई कैरेक्टर नहीं\n<?php\nheader('Location: /new-page.php');\n?>
\n\n

2. header() से पहले echo या print का उपयोग

\n\n

शुरुआती लोगों की एक आम गलती: पहले कुछ आउटपुट करना, फिर यूज़र को रीडायरेक्ट करने की कोशिश करना।

\n\n
<?php\necho "नमस्ते दुनिया!";\nheader('Location: /thanks.php'); // ❌ एरर: पहले ही आउटपुट हो चुका है\n?>
\n\n

3. PHP ब्लॉक से पहले HTML कोड

\n\n

फ़ाइल में मिक्स्ड कोड हो सकता है: पहले HTML मार्कअप, फिर header() के साथ PHP लॉजिक।

\n\n
<!DOCTYPE html>\n<html>\n<head>\n    <title>मेरी वेबसाइट</title>\n</head>\n<body>\n<?php\nheader('Location: /login.php'); // ❌ एरर: HTML पहले ही भेजा जा चुका है\n?>\n</body>\n</html>
\n\n

4. PHP एरर और var_dump() जैसे फंक्शन

\n\n

स्क्रिप्ट header() कॉल से पहले चेतावनी या डीबग जानकारी आउटपुट कर सकती है। उदाहरण के लिए, अगर display_errors ऑन है और PHP warning दिखाता है।

\n\n
<?php\nvar_dump($some_variable); // डेटा आउटपुट\nheader('Content-Type: application/json'); // ❌ एरर\n?>
\n\n

5. इन्क्लूड/रिक्वायर फ़ाइलों में अदृश्य कैरेक्टर

\n\n

आप include या require से एक फ़ाइल जोड़ते हैं, और उस फ़ाइल के अंत में क्लोज़िंग ?> के बाद एक अतिरिक्त खाली लाइन या स्पेस होता है।

\n\n
// config.php\n<?php\n$db_host = 'localhost';\n?>\n // ← यह स्पेस ?> के बाद सब कुछ तोड़ देता है!
\n\n

समस्या का स्रोत कैसे खोजें: चरण-दर-चरण निदान

\n\n

सबसे महत्वपूर्ण बात — एरर हमेशा बताती है कि आउटपुट कहाँ से शुरू हुआ। संदेश को ध्यान से पढ़ें।

ब्लॉग

पुस्तक अनुशंसाएँ