2010-10-17 12 views
46

मैं PHP को लोड करने के सटीक अर्थ/उद्देश्य को एक अपाचे मॉड्यूल बनाम बाकी के रूप में समझने की कोशिश कर रहा हूं।mod_php बनाम सीजीआई बनाम फास्ट-सीजीआई

जब php को अपाचे मॉड्यूल के रूप में स्थापित किया जाता है, तो वास्तव में क्या होता है? उदाहरण के लिए, php-ini फ़ाइल पढ़ने पर हर बार php अनुरोध आता है या जब php मॉड्यूल अकेले लोड होता है?

उत्तर

22

php.ini पढ़ा जाता है जब PHP मॉड्यूल दोनों mod_php, FastCGI और FPM में लोड होता है। नियमित सीजीआई मोड में, कॉन्फ़िगरेशन फ़ाइल को रनटाइम पर पढ़ना पड़ता है क्योंकि किसी भी प्रकार की पूर्ववर्ती प्रक्रिया नहीं होती है।

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

+0

तो अधिक विशिष्ट होने के लिए, कहें कि मेरे पास एक चर है जिसका उपयोग सभी अनुरोधों द्वारा किया जा सकता है। दूसरे शब्दों में, मान लीजिए कि हमें सीरस्टैन पथ (/ home/user/दस्तावेज़) से संबंधित फ़ाइलों को देखने के लिए php दुभाषिया बनाना है। क्या मैं कॉन्फ़िगरेशन में/home/user/दस्तावेज़ों को स्टोर करने में सक्षम हूं और इसे एक बार वैश्विक वैरिएबल में लोड कर सकता हूं? इस तरह यदि उपयोगकर्ता file_get_contents ("new.txt") जारी करता है, तो इसे file_get_contents ("/ home/user/document/new.txt") में अनुवादित किया जाता है –

+0

PHP सेटिंग auto_prepend_file देखें, जो आपको PHP प्रीपेड करने के लिए अवसर प्रदान करेगा वास्तविक अनुरोध को पार करने से पहले चलाने के लिए कोड। अपनी auto_prepended फ़ाइल के अंदर, निर्देशिका बदलने के लिए chdir() का उपयोग करें। ध्यान दें कि यह सभी फ़ाइल संचालन को रोक देगा, यहां तक ​​कि() और आवश्यकता() भी शामिल है! –

+1

@ कार्तिक: PHP दुभाषिया ऐसी जानकारी क्यों संग्रहीत करेगा? इस तरह की जानकारी आपके कोड के बारे में परेशान करने के लिए है। जब आप किसी फ़ाइल को पूर्ण पथ नहीं देते हैं, तो यह PHP स्क्रिप्टर द्वारा निष्पादित की जा रही स्क्रिप्ट के सापेक्ष दिखता है। और नहीं, अलग-अलग PHP दुभाषिया उदाहरण स्वयं के बीच डेटा साझा नहीं कर सकते हैं और नहीं। – Anand

2

php.ini पढ़ा जाता है जब मॉड्यूल को अपाचे मॉड्यूल के मामले में लोड किया जाता है। PHP CGI किसी अन्य शेल स्क्रिप्ट की तरह एक php दुभाषिया निष्पादन योग्य का उपयोग करता है। चूंकि प्रत्येक आमंत्रण में कोई राज्य शामिल नहीं है, इसलिए सीजीआई के मामले में कॉन्फ़िगरेशन फ़ाइल को हर बार पढ़ना होगा।

+0

कृपया टिप्पणी को पढ़ें जिसे मैंने अभी दूसरे उत्तर में पोस्ट किया है। देखें कि क्या आप उसे प्राप्त कर सकते हैं! –

13

इस कड़ी में मदद कर सकते हैं: http://2bits.com/articles/apache-fcgid-acceptable-performance-and-better-resource-utilization.html

निष्कर्ष

तो शुद्ध गति है क्या आप के बाद कर रहे हैं, तो mod_php साथ रहते हैं।

हालांकि, बेहतर संसाधन उपयोग और दक्षता के लिए, fcgid पर जाने पर विचार करें।

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