2009-11-24 15 views
9

Possible Duplicate:
Headers already sent by PHPपीएचपी त्रुटि: हेडर सूचना को संशोधित नहीं कर सकते - हेडर पहले ही भेजा

तो मैं अपने पन्ने पर इस उत्पादन .. समझ नहीं क्यों मैं इसे पॉपिंग है। मैं हालांकि php के लिए नया हूँ, तो हो सकता है कि

-मेरे पास एक header.php फ़ाइल है, जिसमें सभी महत्वपूर्ण जानकारी शामिल हैं, साथ ही पृष्ठ का बैनर भी ठीक है। यह header.php प्रत्येक पृष्ठ पर शामिल है।

- मैंने यह सुनिश्चित करने के लिए सत्र मान की जांच की है कि उपयोगकर्ता को किसी निश्चित पृष्ठ पर रहने की अनुमति है। यदि उपयोगकर्ता को वहां रहने की अनुमति नहीं है, तो मैं उन्हें वापस लॉग इन पेज

यह वह जगह है जहां त्रुटि आती है। मेरे पास यह है:

include_once ("header.php"); 

if ($_SESSION['uid']!='programmer') 
{       
header('Location: index.php'); 
echo 'you cannot be here'; 
exit; 
} 

इंडेक्स जो इसे रीडायरेक्ट कर रहा है वह भी हैडर है। तो क्या यह एकाधिक हेडर संदर्भ मुझे यह त्रुटि दे रहा है? मुझे ऐसा करने का कोई और तरीका नहीं दिख रहा है, और यह मुझे पागल कर रहा है!

+2

"header.php" फ़ाइल में क्या है? –

+0

बैनर, कॉन्फ़िगरेशन में मुझे डीबी, और कुछ jquery से कनेक्ट करने के लिए शामिल हैं। बहुत महत्वपूर्ण फ़ाइल। – Marcus

+1

फिर इसे 'header.php' क्यों कहा जाता है? क्यों 'init.php' या कुछ नहीं? – ceejayoz

उत्तर

32

ब्राउज़र पर आउटपुट होने के बाद आप header() का उपयोग नहीं कर सकते हैं। चूंकि आपके header.php में संभावित रूप से HTML आउटपुट शामिल हैं, header() का उपयोग नहीं किया जा सकता है।

आप कई तरह से इस का समाधान कर सकते हैं:

    के रूप में आप टिप्पणी में इंगित किया है
  • ले जाएँ, तो हैडर ऊपर बयान में शामिल हैं (यह काम नहीं करेगा, कि header.php uid सत्र और अन्य महत्वपूर्ण सेट सामान)।
  • आउटपुट बफर करने के लिए स्क्रिप्ट के शीर्ष पर ob_start() पर कॉल करें।
+4

यह भी ध्यान दें कि जब तक आप आउटपुट बफरिंग आउटपुट, इस त्रुटि को प्रारंभिक PHP टैग से पहले एक खाली रेखा (या स्पेस?) होने का सामना करना पड़ सकता है, क्योंकि यह भी निर्धारित करने के प्रयोजनों के लिए व्हाइटस्पेस आउटपुट के रूप में गिना जाता है कि आप हेडर भेज सकते हैं या नहीं। – Dathan

+0

ठीक है, इसलिए मैंने कथन के बाद हेडर शामिल किया है, और यह त्रुटि से छुटकारा पा लिया है, हालांकि, जब मैं ठीक से लॉग इन करता हूं, तो मुझे index.php पर रीडायरेक्ट किया जाता है इससे कोई फर्क नहीं पड़ता .. वह क्यों है? यूआरएल: http://nait.jtlnet.com/~fpkj5v0r/index.php उपयोगकर्ता: प्रोग्रामर पासवर्ड: <: prog123 -इस अब मेरी कोड है? \t \t \t \t \t अगर ($ _SESSION [ 'यूआईडी'] = 'प्रोग्रामर'!) \t \t \t \t \t \t {\t \t \t \t \t \t हैडर ('स्थान: index.php'); गूंज 'आप यहां नहीं हो सकते'; बाहर निकलें; } \t \t \t \t \t \t \t \t \t \t include_once ("header.php"); ?> – Marcus

+0

और हाँ, दाथन के सिर के लिए धन्यवाद, मैंने सफेद अंतरिक्ष बग के बारे में पढ़ा, और ऐसा प्रतीत नहीं होता है। काश ये उतने आसान होते! – Marcus

6

यदि header.php फ़ाइल "बैनर है", तो संभवतः यह पृष्ठ पर कुछ HTML सामग्री को आउटपुट कर रहा है।

आप सामग्री आउटपुट करने के बाद HTTP शीर्षलेख जारी नहीं कर सकते हैं।

6

कोई अन्य सामग्री भेजने के बाद आप कोई हेडर नहीं भेज सकते हैं। आपके header.php में आपके बंद ?> टैग के बाद एक बहुत ही संभावित अपराधी अतिरिक्त सफेद जगह है। आमतौर पर किसी भी स्क्रिप्ट-केवल php फ़ाइलों में बंद टैग को छोड़ना एक अच्छा अभ्यास है।

आपकी त्रुटि आपको बिल्कुल बताएगी कि कौन सी रेखा (और कौन सी फाइल) आउटपुट भेज रही है।

1

ठीक है, तो यह तय हो गया है ... सुनिश्चित नहीं है कि कैसे, शायद कोई यह समझा सकता है कि यह अचानक क्यों काम करता है।

include_once ("header.php"); 

if ($_SESSION['uid']!='programmer') { 
    if(isset($_SESSION['uid'])) { 
     echo $_SESSION['uid']; 
    }       

    header('Location: index.php'); 
    exit; 
} 

मुझे दोहराएँ, यह सब अब काम करता है:

यह मेरा कोड है! PHP ... अब आप क्यों काम करते हो?

+3

यह काम नहीं करेगा $ _SESSION ['uid'] सेट है। फिर गूंज कॉल करने से पहले इको होगा, जो एक बुरी चीज है! तो जब तक आप header.php में आउटपुट बफरिंग पर स्विच नहीं कर लेते हैं, यह केवल तभी काम करेगा जब $ _SESSION ['kid'] सेट नहीं है। –

+0

@ पीटरबैग्नल सही है, तर्क दोषपूर्ण है; सबसे पहले, आप मान $ _SESSION ['uid'] की जांच कर रहे हैं जब आपको लगता है कि यह संभवतः सेट नहीं हो सकता है, और फिर आप यह जांचते हैं कि यह सेट है या नहीं ... अगर (जारीकर्ता ($ _ सत्र ['uid'])) { इसके बजाय पहले कथन में जाना चाहिए। ** दूसरा **: कारण यह काम कर सकता है अगर $ _SESSION ['uid'] = NULL; इसलिए ब्राउज़र पर कोई डेटा नहीं भेजा जाता है। – Valerie

1

मैं एक पुनर्निर्देशन समारोह जो इस प्रकार हुआ करता था के संबंध में (प्रतीत होता है कहीं से भी) एक समान त्रुटि का सामना किया:

function Redirect($url) { 
     flush(); // Flush the buffer 
     header("Location: $url"); // Rewrite the header 
     die; 
    } 

जाहिर है, आप भी ob_flush(); जोड़ने के लिए पूरी तरह से बाहर फ्लश करने के लिए की जरूरत है पुराना हेडरनया कार्य है:

function Redirect($url) { 
     flush(); // Flush the buffer 
     ob_flush(); 
     header("Location: $url"); // Rewrite the header 
     die; 
    } 

आशा है कि इससे किसी और को यह समस्या होने में मदद मिलेगी!

+0

मुझे नहीं लगता कि यह तब तक कैसे काम करेगा जब तक ob_start() का उपयोग नहीं किया गया था ... जिसे आपने अपने कोड में इंगित नहीं किया था। PHP के अनुसार: फ्लश() कुछ चेतावनियों के साथ ** ** ** वर्तमान आउटपुट को ब्राउज़र के लिए सभी तरह से धक्का देता है। एक बार जब सामग्री डेटा ब्राउज़र पर भेजा जाता है तो शीर्ष पर वापस जाने और संपादित करने का कोई तरीका नहीं है। http://php.net/manual/en/function.flush.php – Valerie

संबंधित मुद्दे

 संबंधित मुद्दे