2011-01-20 10 views
6

मैं सहित और ajax लोड करने के लिए के लिए एक ही PHP स्क्रिप्ट का उपयोग करें। यह कुछ यादृच्छिक कैटलॉग आइटम हैं जो पृष्ठ से लोड होते हैं और AJAX के साथ लोड किए जा सकते हैं। मुझे header() का उपयोग केवल तभी किया जाना चाहिए जब यह AJAX के माध्यम से लोड हो।PHP: आउटपुट पहले से शुरू होने पर कैसे पता चलेगा?

जब मैं शीर्ष लेख समारोह और उत्पादन का उपयोग पहले से ही मैं इसके बारे में php चेतावनी मिलती है शुरू कर दिया। Php कैसे जानता है कि आउटपुट पहले ही शुरू हो गया है? यह निर्धारित करने का सबसे अच्छा तरीका क्या है, और हेडर फ़ंक्शन को कॉल नहीं करना है?

धन्यवाद।

उत्तर

9

http://php.net/manual/en/function.headers-sent.php

// If no headers are sent, send one 
if (!headers_sent()) { 
    header('...'); 
    exit; 
} 
+0

धन्यवाद एक बहुत! मुझे जिस चीज की जरूरत थी। और किस तरह से बाहर निकलें? – SaltLake

+1

बाहर निकलने का उपयोग सीधे 'हेडर: स्थान' कॉल के लिए संदर्भित PHP मैनुअल से है, जिसके लिए इसकी आवश्यकता होती है। आपके मामले में आपको इसे जोड़ना नहीं चाहिए, या आप आउटपुट तोड़ देंगे। – tomwalsham

+0

हाँ क्षमा करें, मैंने इसे मैन्युअल से सीधे कॉपी किया और इसे हटाने के लिए भूल गए :) – Jake

2

एक विकल्प शुरुआत में ob_start(), जो buffers all your output कॉल करने के लिए है। इस तरह आप किसी भी समय हेडर भेज सकते हैं।

4

नहीं है एक आसान में निर्मित है कि के लिए:

if (!headers_sent()) { 
    header('Your header here'); 
} 

नहीं और अधिक जोड़ने के लिए :)

2

headers_sent() रिटर्न true अगर आप अतिरिक्त शीर्ष-लेख नहीं भेज सकते।

0

आप ग्राहक के लिए कुछ भी भेजा है, उत्पादन शुरू कर दिया।

उदाहरण के लिए एक भी HTML टैग, यह पहले से ही उत्पादन है।

आप अपने आवेदन की संरचना कर सकते हैं या तो इतना है कि ऐसा नहीं होता है, या आप उत्पादन बफरिंग चालू कर सकते हैं:

http://php.net/manual/en/function.ob-start.php

0

बस कोड शुरू होने से पहले खाली पंक्ति को हटा दें और बाहर निकलें जोड़ने; आपके आउटपुट समाप्त होने के बाद ।

+0

प्रश्न में कोई कोड नहीं है - आप कैसे जानते हैं कि वहां क्या है और क्या नहीं है? अधिकांश मौजूदा उत्तरों 'headers_sent() 'का उपयोग करने का सुझाव देते हैं - क्या आपका सुझाव बेहतर हो सकता है? – andrewsi

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