2010-09-09 4 views
6

के साथ है, मैं उन प्रश्नों को कैश करने के लिए प्रॉक्सी सेवा लिख ​​रहा हूं जो मेरा मोबाइल ऐप webservice को बनाता है। (बीच में एक आदमी की तरह)PHP: स्ट्रिंग करने के लिए एक्सएमएल फ़ाइल जो तेजी से file_get_contents या simplexml_load_file asXML()

मेरे द्वारा निर्मित प्रॉक्सी साइट का कार्य यह है कि यह ऐप से तृतीय पक्ष webservice पर प्राप्त क्वेरी को पास करता है और किसी तृतीय पक्ष webservice से प्रतिक्रिया को XML फ़ाइल के रूप में सहेजता है और बाद में सभी के लिए एक्सएमएल फ़ाइल से एक ही क्वेरी के लिए कॉल करता है और प्रतिक्रिया प्रदान करता है (मूल रूप से प्रतिक्रिया-प्रयोग करने वाले PHP, कर्ल और simplexml_load_file को कैशिंग)।

अब मेरा प्रश्न है - xml फ़ाइल पढ़ने और स्ट्रिंग को वापस करने का अनुशंसित तरीका क्या है।

विकल्प 1: $ सामग्री = file_get_contents ($ filename); $ सामग्री echo;

विकल्प 2: $ एक्सएमएल = simplexml_load_file ($ फ़ाइल का नाम) $ XML- गूंज> asXML();

+0

क्या यह एक्सपीएल फ़ाइल को प्रॉक्सी पर स्टोर करने के लिए आपकी PHP स्क्रिप्ट की ज़िम्मेदारी है? (उस मामले में readfile() के बारे में मेरा जवाब पूरी तरह फिट नहीं है ;-)) – VolkerK

उत्तर

4
readfile($filename); 

file_get_contents/गूंज पहले php प्रक्रिया 'स्मृति में संपूर्ण सामग्री पढ़ता है और उसके बाद उत्पादन धारा को भेज देता है। यदि आप इसे अग्रेषित करने के लिए आईडी करना चाहते हैं तो पूरी सामग्री को स्मृति में रखना आवश्यक नहीं है।
simplexml_load_file() न केवल संपूर्ण सामग्री को स्मृति में पढ़ता है, यह दस्तावेज़ को पार्स करता है जो अतिरिक्त समय लेता है। यदि आप दस्तावेज़ से विशिष्ट डेटा प्राप्त नहीं करना चाहते हैं या इसे परीक्षण/संशोधित नहीं करना चाहते हैं तो फिर से अनावश्यक।

readfile() सामग्री को सीधे आउटपुट स्ट्रीम में भेजता है और ऐसा कर सकता है "किसी भी तरह से यह फिट हो सकता है"। अर्थात। यदि समर्थित है तो मेमोरी मैप की गई फ़ाइलों का उपयोग कर सकते हैं, यदि नहीं, तो यह कम से कम छोटे हिस्सों में सामग्री को पढ़ सकता है।

+0

हाँ फ़ाइल को स्टोर करना मेरी ज़िम्मेदारी है, लेकिन यह कोड\t $ ch = curl_init ($ अनुरोध जैसे कोड का उपयोग कर कर्ल द्वारा किया जा रहा है); \t \t $ fp = fopen ($ filename, "w"); \t curl_setopt ($ ch, CURLOPT_FILE, $ fp); \t curl_setopt ($ ch, CURLOPT_HEADER, 0); \t curl_exec ($ ch); \t curl_close ($ ch); – gforg

+0

आह ठीक है, फिर readfile() का उपयोग करें जब तक कि आप दस्तावेज़ को संसाधित/परिवर्तित नहीं करना चाहते हैं। – VolkerK

+0

धन्यवाद। रीडफाइल ने काम किया और आपके सुझाव के बाद मैंने कुछ परिदृश्य और मेरे परिदृश्य के लिए रीडफाइल का उपयोग करने के लिए सभी बिंदुएं कीं। धन्यवाद! – gforg

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