2010-06-15 9 views
28

मेरे पास एक वेबसाइट है जो रखरखाव मैंने विरासत में प्राप्त की है, जो एक बड़ी बालों वाली गड़बड़ है।
मैं जो चीजें कर रहा हूं उनमें से एक प्रदर्शन में सुधार कर रहा है। अन्य चीजों के अलावा, मैं Expires शीर्षकों को छवियों में जोड़ रहा हूं।मेरे प्रतिक्रिया हेडर को "प्रगमा: नो-कैश" जोड़ने में क्या जोड़ा जा सकता है? (अपाचे, पीएचपी)

अब, कुछ छवियां हैं जो एक PHP फ़ाइल के माध्यम से परोसे जाते हैं, और मुझे लगता है कि उनके पास Expires शीर्षलेख है, लेकिन वे हर बार लोड भी होते हैं।

Expires Wed, 15 Jun 2011 18:11:55 GMT 
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma no-cache 

कौन सा स्पष्ट रूप से समस्या बताते हैं:

प्रतिक्रिया हेडर को देखते हुए, मैं इस को देखते हैं।

अब, मैंने कोड कोड पर सभी को देखा है, और यह कहीं भी "प्रगमा" नहीं कहता है। .htaccess में कुछ भी संबंधित नहीं प्रतीत होता है।

कोई भी विचार जो "प्राग्मा" (और "कैश-कंट्रोल") हेडर सेट कर सकता है, और मैं इससे कैसे बच सकता हूं?

उत्तर

9

एक साधारण फ़ाइल बनाएं जिसमें आपकी कोई भी PHP लाइब्रेरी शामिल न हो, लेकिन एक फ़ाइल में उसी फ़ाइल में रहती है जो आपकी छवियों को एक PHP फ़ाइल के माध्यम से प्रस्तुत करती है।

file: test.php 

ब्राउज़र के माध्यम से इस फ़ाइल का अनुरोध करें और शीर्षलेखों की जांच करें। यदि आप उन प्रतिक्रिया शीर्षलेखों को देखते हैं जिन्हें आप नहीं चाहते हैं, तो आप जानते हैं कि वे अपाचे के माध्यम से कॉन्फ़िगर किए गए हैं और PHP फ़ाइल के माध्यम से जेनरेट नहीं किए गए हैं और आप निर्देशिका पेड़ में .htaccess फ़ाइल पर और http.confg पर अपनी खोजों पर ध्यान केंद्रित कर सकते हैं। और अन्य अपाचे कॉन्फ़िगरेशन फ़ाइलें शामिल हैं। आप

<Directory.... 

और

<VirtualHost 

वर्गों है कि आपकी साइट के लिए आवेदन कर सकते हैं के लिए खोज करने के लिए चाहता हूँ।

यदि आपको उस साधारण PHP फ़ाइल के अनुरोध में शीर्षलेख दिखाई नहीं देते हैं, तो आप जानते हैं कि PHP कहीं शीर्षलेख स्थापित कर रहा है। अपनी छवि की सेवा फ़ाइल के अंत में, लेकिन निम्नलिखित पीएचपी टुकड़ा)

var_dump(get_included_files()); 

अनुरोध एक छवि चित्र URL की सेवा के माध्यम से (या सही होने के बाद यह छवि और बाहर निकलता है echos)। उपर्युक्त स्निपेट अनुरोध में उपयोग की जाने वाली सभी PHP फ़ाइलों को प्रिंट करेगा। ,

पर कॉल के लिए उन के माध्यम से खोज (आप शायद स्रोत देख सकते हैं या कच्चे उत्पादन को देखने के लिए कर्ल का उपयोग करने, के रूप में ब्राउज़र में अमान्य छवि रिपोर्ट करेंगे की आवश्यकता होगी)

फ़ाइल काम करने के लिए अपनी फ़ाइलें के एक सबसेट होने

header(); 

फ़ंक्शन। header फ़ंक्शन एकमात्र तरीका है (मुझे लगता है) कि कच्चा PHP कोड प्रतिक्रिया हेडर सेट कर सकता है।इसके अलावा आपको वहां पेज है कि PHP के मेटा प्रोग्रामिंग क्षमताओं का उपयोग कर रहा header फ़ंक्शन को कॉल करने पर किसी भी गतिशील कोड होने की स्थिति में

call_user_func 
eval 
$$ 

के लिए खोज करने के लिए चाहता हूँ।

शुभकामनाएं!

+0

वाह, विस्तृत उत्तर के लिए धन्यवाद। यह निश्चित रूप से अपाचे की कॉन्फ़िगरेशन है, लेकिन मेरे पास इसका उपयोग नहीं है। मेरे पास केवल मेरी वेबसाइट की निर्देशिका में एफ़टीपी पहुंच है। कोई विचार है कि मैं केवल अपने .htaccess फ़ाइलों का उपयोग करके इन शीर्षकों को ओवरराइड/हटा सकता हूं? –

+0

दुर्भाग्यवश, उत्तर के साथ जल्दी से आने के लिए यह बहुत सामान्य है। आपको यह जानना होगा कि कौन से अपाचे निर्देश प्रभाव को ओवरराइड करने के लिए कैशिंग को खत्म कर रहे थे और यह जानने की जरूरत है कि वे .htacess में अतिसंवेदनशील थे और ऐसा करने के लिए वाक्यविन्यास को जानते हैं। बहुत अधिक समय बर्बाद करने के बजाय मैं इसे सर्वर प्रशासकों को श्रृंखला बढ़ा दूंगा और देख सकता हूं कि वे आपकी मदद नहीं कर सकते हैं, क्योंकि "डिफ़ॉल्ट रूप से कैशिंग" अपाचे और/या PHP मॉड्यूल की डिफ़ॉल्ट कॉन्फ़िगरेशन नहीं है। #nothelpfulsorry –

+0

बहुत बहुत धन्यवाद। –

1

यदि यह .htaccess में नहीं है तो यह मुख्य अपाचे कॉन्फ़िगरेशन फ़ाइल में हो सकता है - या सेटअप में निर्भर करता है।

+0

कोई विचार है कि इसे मेरे .htaccess से कैसे ओवरराइड करें? (मेरे पास इस सर्वर पर एसएसएच एक्सेस नहीं है, या httpd.conf तक पहुंच है) –

+0

सुनिश्चित नहीं है कि वास्तव में * हेडर को कैसे निकालें * - सर्वरफॉल्ट पर पूछने का प्रयास करें। –

-1

फ़ाइलों को देखने के लिए grep -R pragma . चलाएं।

+1

क्या वह था। कुछ भी तो नहीं। मेरा मतलब है "मैंने कोड कोड के ऊपर देखा" –

6

हेडर को .htaccess में अनसेट करने का प्रयास करें। नीचे दिए गए उदाहरण उन्हें एक्सटेंशन ico, jpeg, png, gif, js, css मिलान सभी फ़ाइलों के लिए अनसेट देगा:

<FilesMatch "\.(ico|jpeg|png|gif|js|css)$"> 
    Header unset Cache-Control 
    Header unset Pragma 
</FilesMatch> 

आप this article में कुछ संकेत मिल सकता है।

27

अपराधी php.ini हो सकता है, जहां session.cache_limiter = nocache। विरोधी कैशिंग हेडर से बचने के लिए मान को रिक्त या सार्वजनिक में बदलें।

+0

धन्यवाद! मैंने सत्र.cache_limiter ('nocache') के डिफ़ॉल्ट मान को '' 'में बदल दिया और यह समस्या हल हो गई। – Yeroon

+0

"सार्वजनिक" के लिए, क्या यह ऐसी वेबसाइट के लिए खतरनाक नहीं होगा जिसमें कुछ निजी पृष्ठ हों? –

+0

संभवतः केवल सार्वजनिक दस्तावेजों को कैशिंग सीमित कर रहा है। – technomage

3

मैं इस के साथ क्रम पर यह काम किया:

header("Pragma:"); 

जो Pragma हैडर अनसेट करने के लिए स्क्रिप्ट मजबूर कर दिया।

+0

यह काम करता है, मैं देख सकता हूं कि प्रगति ओवरराइड थी। –

10

मैं साथ Pragma: nocache

session_cache_limiter(false); पहले session_start(); करने के लिए इसे दबाने के लिए लग रहा था एक ऐसी ही समस्या थी।

+0

देखें: http://php.net/manual/en/function.session-start.php – Almer

0

इसी तरह की समस्याओं वाले लोगों के लिए ध्यान देने योग्य है कि कई ढांचे विशेष रूप से कैशिंग वाले हेडर्स को स्वतः जोड़ देंगे। ढांचे पुस्तकालय में या अपने ऐप के भीतर उन्हें अधिभारित करना काफी आसान है।

+0

डाउनवोट के लिए कोई कारण? मुझे पता है कि ज़ेंड ऑटो-हेडर जोड़ता है। माइकल द्वारा दिखाए गए अनुसार हेडर को PHP के हेडर टैग के माध्यम से अधिभारित किया जा सकता है या ढांचे के लिए यह विशेष कार्य होगा। ज़ेंड के लिए आपको setHeader() का उपयोग करना होगा – twunde

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