2010-05-05 6 views
16

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

तो मैं जानना चाहता हूं कि PHP वास्तव में अपाचे वेब सर्वर (या वास्तव में कोई अन्य वेब सर्वर) के साथ कैसे इंटरफेस करता है, इसलिए मैं इससे सीख सकता हूं और अपना स्वयं का PHP wrapper लिख सकता हूं। यह आवश्यक नहीं है कि mod_php होना चाहिए, मुझे एक फास्टसीजीआई रैपर लिखने में कोई फर्क नहीं पड़ता - जो मेरे ज्ञान के लिए PHP को चलाने में सक्षम है।

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

जो मैंने अभी तक एकत्र किया है, उससे apache2handler एक एपीआई प्रदान करता है जो PHP अपाचे को 'कनेक्ट' करने का उपयोग करता है। मुझे लगता है कि apache2handler और php5apache2.dll के लिए स्रोत कोड को देखना एक विचार है, लेकिन इससे पहले कि मैंने सोचा कि मैं पहले पूछूंगा।

यदि किसी के पास अधिक जानकारी, अनुभव, या किसी प्रकार का विनिर्देश है जो इसके लिए प्रासंगिक है तो कृपया मुझे बताएं।

अग्रिम धन्यवाद!

उत्तर

19

वहाँ 3 तरीके पीएचपी अपाचे से लागू किया जा सकता है:

1) एक मॉड्यूल के रूप - इस वेब सर्वर द्वारा प्रकाशित

2) सीजीआई हुक का एक पुस्तकालय के खिलाफ php दुभाषिया लिंक करना पड़ता है - वेबसर्वर प्रत्येक अनुरोध के लिए दुभाषिया का एक उदाहरण शुरू करता है और स्टेडिन, कमांड लाइन और पर्यावरण चर के माध्यम से दुभाषिया को पैरामीटर पास करता है, stdout क्लाइंट को भेजा जाता है और stderr को त्रुटि_log

3) fastCGI - यह समाप्त हो जाता है प्रत्येक अनुरोध के लिए एक नई प्रक्रिया शुरू करने के उपर - इंटरप रेटर एक डेमॉन

सीजीआई लागू करने के लिए सबसे आसान है लेकिन अच्छी तरह से स्केल/प्रदर्शन नहीं करता है, मॉड्यूल अब तक का सबसे कठिन होगा। फास्टसीजीआई मॉड्यूल दृष्टिकोण के जितना तेज़ है। सीजीआई और फास्टसीजीआई खुले, अच्छी तरह से प्रलेखित एपीआई हैं।

अपने लक्ष्य को प्राप्त करने के अन्य तरीके हैं - उदा। Quercus

सी

+0

आह, यह बहुत समझ में आता है। धन्यवाद! मैं इसमें देख लूंगा। मैं सिर्फ सीजीआई दृष्टिकोण को काम करने की कोशिश कर सकता हूं और फिर फास्टसीजीआई में देख सकता हूं क्योंकि मैंने दूसरे दिन उनके विनिर्देश को देखा लेकिन इसे बहुत भ्रमित पाया, शायद मैं गलत जगह पर देख रहा था। –

4

यह बस में कहें, यह है कि यह कैसे काम करता है:

अपाचे सामान्य रूप से फ़ाइल को लाने और HTTP कनेक्शन नीचे धारा भेजकर फ़ाइलों में कार्य करता है। PHP के साथ, हालांकि, अपाचे फ़ाइल को लाता है, इसे PHP बाइनरी में पाइप करता है, और HTTP कनेक्शन के नीचे कमांड से आउटपुट स्ट्रीम भेजता है।

+0

यह एक अच्छी शुरुआत है, लेकिन इंटरफ़ेस है कि तुलना में अधिक जटिल है। Apache सामग्री को भेजता है इससे पहले PHP को HTTP शीर्षलेखों को संशोधित करने की क्षमता नहीं है .. – Matt

+0

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

1

php फ़ाइल, HTTP अनुरोध, और क्लाइंट होस्ट नाम के अतिरिक्त, जानकारी के कुछ अन्य आइटम आमतौर पर $_SERVER सुपरग्लोबल के कुछ अन्य तत्वों को सेट करने के लिए PHP को पास किए जाते हैं। लिंक किए गए दस्तावेज़ पृष्ठ में आमतौर पर सेट की गई सूची की एक सूची होती है।

+0

हाँ, मुझे पता है कि वास्तव में यह संभवतः सभी जानकारी है जो phpinfo() के 'अपाचे पर्यावरण' अनुभाग के अंतर्गत है। –

+0

हम्म, मुझे अभी एहसास हुआ कि $ _SERVER को एक argv और argc चर मिला है जिसमें दुभाषिया को दिए गए तर्क शामिल हैं। मुझे लगता है कि मैं एक साधारण PHP स्क्रिप्ट चलाऊंगा और argv और argc सामग्री आउटपुट करूंगा, इससे शायद मुझे एक बेहतर विचार मिलेगा कि PHP कैसे लागू किया जाता है। स्क्रैप करें - रिक्त आउटपुट - अपाचे बाहरी रूप से php.exe से संपर्क नहीं करता है, php.exe से पूछताछ करने के बजाय आंतरिक रूप से और अधिक होना चाहिए। –

1

कुंजी शब्द CGI है।
यह नाटकीय रूप से सरल प्रोटोकॉल है, जो उम्र के लिए वेब-सर्वर की सेवा करता है।
PHP के लिए वेब-सर्वर से बातचीत करने का यह एकमात्र तरीका नहीं है, लेकिन सबसे आम और इसे लागू करने में आसान है।

संक्षेप में, आपके सर्वर को कुछ पर्यावरण चर सेट अप करना होगा, और उसके बाद एक cgi-script को कॉल करें जो केवल एक php स्क्रिप्ट है।

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