2011-08-12 24 views
6

असल में, मैं यह समझने की कोशिश कर रहा हूं कि "वेब सर्वर" से PHP को कैसे कॉल किया जा सकता है।वर्चुअल/कस्टम "वेब सर्वर" से PHP को कॉल करें

मैंने प्रलेखन पढ़ा है, लेकिन इससे ज्यादा मदद नहीं मिली है।

जहां तक ​​मेरा बता सकते हैं तीन तरीके पीएचपी आह्वान करने के लिए कर रहे हैं: कमांड लाइन (जैसे: php -f "/path/to/script.php") के माध्यम से

  • CGI द्वारा (??)/FastCGI के माध्यम से (???)
  • एक वेब सर्वर (जैसे: अपाचे) के माध्यम से मॉड्यूल

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

अगला, हमारे पास सर्वर-विशिष्ट मॉड्यूल हैं, जो मुझे नहीं पता कि क्या खोजना है क्योंकि सभी लीड कहीं भी खत्म नहीं होती हैं।

+1

क्या आपने कोड पढ़ना माना है? आपके प्रश्न में ये सभी चीजें ओपन सोर्स हैं। –

+0

@ क्या मैं अभी कोशिश कर रहा हूं * कोशिश कर रहा हूं। लेकिन यह कई कारणों से मुश्किल साबित हो रहा है: ** (1) ** मुझे सभी कोड नहीं मिल रहे हैं ** (2) ** कोड सी/सी ++ ** (3) में है ** कोड बहुत पुराना है और/या गंदा। – Christian

+0

@ डैन कहता है कौन ?? अगर मैं चाहता था (या एफपीसी, जिसे मैं योजना बना रहा हूं) मैं इसे असेंबलर या एडीए में कर सकता था। – Christian

उत्तर

7

एक CGI स्क्रिप्ट का आह्वान करना बहुत आसान है। पीएचपी कुछ विशेषताओं है, लेकिन आप मूल रूप से केवल सेटअप करने के लिए वातावरण चर की एक सूची, पीएचपी-सीजीआई द्विआधारी की जरूरत है तो कहते हैं:

setenv GATEWAY_INTERFACE="CGI/1.1" 
setenv SCRIPT_FILENAME=/path/to/script.php 
setenv QUERY_STRING="id=123&name=title&parm=333" 
setenv REQUEST_METHOD="GET" 
... 

exec /usr/bin/php-cgi 

उनमें से ज्यादातर बॉयलरप्लेट हैं। SCRIPT_FILENAME यह है कि आप वास्तविक PHP फ़ाइल नाम को PHP दुभाषिया को कैसे पास करते हैं, निष्पादन पैरामीटर के रूप में नहीं। PHP के लिए महत्वपूर्ण गैर-मानक चर REDIRECT_STATUS=200 भी है।

एक जीईटी अनुरोध के लिए आपको केवल पर्यावरण चर की आवश्यकता है। POST अनुरोध के लिए, आप बस HTTP अनुरोध निकाय को stdin निष्पादित php-cgi बाइनरी में पाइप करें। लौटा stdout सीजीआई प्रतिक्रिया है जिसमें अपूर्ण HTTP शीर्षलेख, \ r \ n \ r \ n, और पृष्ठ निकाय शामिल है।

(बस स्मृति से। शायद कुछ और गॉथस।)

+0

ओएच। यह सब बताता है। – Christian

+0

मुझे इस मुद्दे का सामना करना पड़ा तो आपको स्पष्ट रूप से 'PATH_INFO' और' SCRIPT_PATH' चर को पॉप्युलेट करना होगा। विवरण के लिए कृपया [मेरा प्रश्न] (http://stackoverflow.com/questions/18962960) देखें – Andrey

1

FastCGI शायद सबसे अच्छा विकल्प है क्योंकि यह तो बुद्धिमानी से प्रयोग किया जाता है, तो यह आपको भाषा स्वतंत्रता देना होगा (आप रूबी में बाद में छोड़ सकता है, उदाहरण के लिए) और यह lotsofexamples साथ well documented है।

यदि आप वास्तव में चाहते हैं तो आप अपना खुद का Server API लिख सकते हैं, लेकिन यह फास्टसीजीआई को लागू करने से अधिक कठिन है और इसके कई नुकसान हैं।

मैं सीधे सीजीआई के साथ परेशान नहीं होगा, फास्टसीजीआई एक कारण के लिए मौजूद है।

+0

ठीक है, वेब सर्वर PHP निष्पादन योग्य के साथ आईपीसी कैसे करता है? स्थानीय (लूपबैक) कनेक्शन? – Christian

+0

@ क्रिस्टियन यह एक अलग मेजबान (एक मनमानी टीसीपी/आईपी कनेक्शन) या यूनिक्स पाइप के दूसरे छोर पर हो सकता है। मैंने जिस स्पेक से लिंक किया है उसे पढ़ें, यह काफी स्पष्ट रूप से लिखा गया है। –

+0

मैं कुछ घंटों की नींद के बाद इसे अच्छी तरह से देखूंगा। यह पहले से ही 2:30 बजे है:/ – Christian