2012-02-16 13 views
21

आपके लिए एक बहुत ही बुनियादी सवाल है। मुझे बस अपने लैपटॉप पर WAMP सर्वर के बिन फ़ोल्डर में दो निष्पादन योग्य फ़ाइलें php-cgi.exe और php.exe मिलीं। मैं PHP सीख रहा हूं और अंतर को समझ नहीं पाया। उनके बीच क्या अंतर है?php cli और php cgi के बीच क्या अंतर है?

+1

संभावित डुप्लिकेट [कमांडलाइन से और एचटीपी साइड से php निष्पादित करने के बीच अंतर] (http://stackoverflow.com/questions/3016281/difference-between-executing-php-from-the-commandline-and-from -इस-http साइड) – mario

+0

@mario कैसे आप डुप्लिकेट मिल सकती है? मुझे कोई डुप्लिकेट नहीं मिला। – user1208865

उत्तर

15

पीएचपी CLI
पीएचपी सीजीआई (वेब ​​अनुप्रयोगों के लिए जैसे) PHP के लिए आम प्रवेश द्वार इंटरफेस

+18

और PHP पीएचपी हाइपरटेक्स्ट प्रीप्रोसेसर है। क्या यह वास्तव में एक जवाब है ?! मुझे लगता है कि इतना – Trix

4

CLI कमांड लाइन स्क्रिप्ट के लिए, सीजीआई है (स्टैंडअलोन अनुप्रयोग बनाने के लिए जैसे) PHP के लिए कमांड लाइन इंटरफेस है वेब अनुरोधों के लिए

13

php-cgi वेबसर्वर के लिए है। अन्य चीजों के अलावा यह आपके लिए HTTP शीर्षलेखों को संभालता है।

सीएलआई संस्करण एक कमांड लाइन (इसलिए "कमांड लाइन इंटरफेस") पर चलाने का इरादा है। यह हेडर, या किसी अन्य सर्वर से संबंधित चीजों को संभाल नहीं करता है।

3

php-cli कमांड लाइन पर PHP चलाने के लिए है। php-cgi आपके लिए अतिरिक्त चीजें करता है, जैसे कि HTTP शीर्षलेख और कुछ सुरक्षा संशोधन।

ऐसा कहकर, एक FastCGI मॉड्यूल स्थापित करने और PHP's FastCGI interface का उपयोग करने पर विचार करें। यह PHP को php-cgi से स्पष्ट रूप से तेज़ चलाना चाहिए। मेरा मानना ​​है कि मानक अपाचे फास्टसीजीआई मॉड्यूल mod_fcgid है।

28

से http://www.php-cli.com/php-cli-cgi.shtml

ये CLI और सीजीआई के बीच सबसे महत्वपूर्ण अंतर हैं:

  • CGI SAPI के विपरीत, CLI डिफ़ॉल्ट रूप से उत्पादन करने के लिए कोई शीर्ष लेख लिखते हैं
  • कुछ php.ini रहे हैं निर्देश जो सीएलआई एसएपीआई द्वारा ओवरराइड किए गए हैं क्योंकि वे शैल वातावरण में समझ में नहीं आते हैं:
    • html_errors: CLI डिफ़ॉल्ट गलत है
    • implicit_flush: CLI डिफ़ॉल्ट सही है
    • max_execution_time: CLI डिफ़ॉल्ट है 0 (असीमित)
    • register_argc_argv: CLI डिफ़ॉल्ट सही है
  • आपके स्क्रिप्ट के साथ कमांड लाइन तर्क हो सकते हैं! परिवर्तनीय "$ argc" आपको एप्लिकेशन पर पास किए गए कई तर्क प्रदान करता है। और सरणी "$ argv" आपको वास्तविक तर्कों की एक सरणी देता है
  • शैल पर्यावरण के लिए 3 नए निरंतर परिभाषित किए गए हैं: STDIN, STDOUT, STDERR। वे सभी संवाददाता खोल उपकरणों के लिए फ़ाइल हैंडलर हैं। उदाहरण के लिए एसटीडीआईएन फॉपेन ('php: // stdin', 'r') के लिए हैंडलर है। तो, आप जैसे एसटीडीआईएन से एक लाइन पढ़ सकते हैं: $ strLine = trim (fgets (STDIN)); एसटीडीआईएन पहले ही PHP12 सीएलआई द्वारा के लिए परिभाषित किया गया है!
  • PHP सीएलआई वर्तमान निर्देशिका को निष्पादित स्क्रिप्ट की निर्देशिका में नहीं बदलता है।स्क्रिप्ट के लिए वर्तमान निर्देशिका निर्देशिका होगी जहां आपका प्रकार PHP CLI कमांड होगा।
  • PHP सीएलआई के लिए उपलब्ध कई प्रकार के विकल्प उपलब्ध हैं। कौन सा आपको PHP सेटअप, आपके PHP स्क्रिप्ट के बारे में कुछ मूल्यवान जानकारी प्राप्त करने या इसे विभिन्न मोड में चलाने की अनुमति देगा।
  • PHP 5 में सीएलआई और सीजीआई फ़ाइल नामों में कुछ बदलाव हुए थे। PHP 5, में CGI संस्करण का नाम बदलकर php-cgi.exe (पहले php.exe) और सीएलआई संस्करण अब मुख्य निर्देशिका (पहले cli/php.exe) में बैठता है।
  • PHP 5 में इसे एक नया मोड भी पेश किया गया था: php-win.exe। यह सीएलआई संस्करण के बराबर है, सिवाय इसके कि php-win कुछ भी आउटपुट नहीं करता है और इस प्रकार कोई कंसोल नहीं देता है (स्क्रीन पर "डॉस बॉक्स" दिखाई नहीं देता है)। यह व्यवहार PHP जीटीके के समान है।
+0

हाय वहाँ नहीं है, अगर यह कुछ समय समाप्ति है तुम जानते हो? मेरा मतलब है कि यदि एक स्क्रिप्ट चलाने की आवश्यकता है जो चलाने के लिए बहुत लंबा लगता है। क्या यह सीएलआई पर चलाने का अच्छा विकल्प है? –

+1

हां, निश्चित रूप से। सीएलआई max_execution_time में: डिफ़ॉल्ट 0 (असीमित) है। –

6

यह आपको उनके अंतर का एक व्यापक समझ दे सकता है:

सीजीआई: (आम गेटवे इंटरफ़ेस) यह एक वेब सर्वर और एक CGI कार्यक्रम में जानकारी स्थानांतरित करने के लिए एक विनिर्देश "प्रोटोकॉल" है ।

एक सीजीआई प्रोग्राम कोई भी प्रोग्राम है जो सीजीआई विनिर्देश के अनुरूप डेटा स्वीकार करने और वापस करने के लिए डिज़ाइन किया गया है।

असल में यह एक HTTP पक्ष स्क्रिप्ट (PHP, पर्ल, पायथन, ...) चलाने का एक तरीका है जब एक HTTP अनुरोध आता है।

सीजीआई अन्य विकल्पों की तुलना में बहुत धीमी है।


FastCGI: एक बेहतर सीजीआई है।

फास्ट सीजीआई बहुत तेज परिणामों के साथ एक अलग दृष्टिकोण है।

यह केवल कुछ एक्सटेंशन के साथ एक सीजीआई है।

PHP-FPM के पक्ष में FastCGI कार्यान्वयन अब उपलब्ध नहीं है।


पीएचपी-एफ पी एम: (FastCGI प्रक्रिया प्रबंधक), यह वर्ष FastCGI तुलना में एक बेहतर FastCGI कार्यान्वयन है।

यह एक स्टैंडअलोन फास्टसीजीआई सर्वर के रूप में चलता है।

सामान्य रूप से यह वेब सर्वर (अपाचे, Nginx ..) के लिए एक PHP इंटरफेस है ताकि वेब सर्वर को PHP के साथ बातचीत करने की अनुमति मिल सके।

PHP-CLI के विपरीत जो PHP के लिए कमांड लाइन इंटरफ़ेस है जो उपयोगकर्ताओं को टर्मिनल के माध्यम से PHP के साथ संवाद करने की अनुमति देता है।


mod_php: एक अपाचे मॉड्यूल पीएचपी चलाने के लिए।

यह एक सीजीआई प्रोग्राम के साथ संचार किए बिना वेब सर्वर के हिस्से के रूप में सीधे वेब सर्वर के अंदर PHP स्क्रिप्ट निष्पादित करता है।


mod_SuPHP: mod_php के समान है लेकिन उपयोगकर्ता/समूह है कि इस प्रक्रिया के अधीन ही बदल सकते हैं।

असल में यह अनुमतियों से संबंधित mod_php की कुछ समस्याओं को संबोधित करता है।

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