कॉमन गेटवे इंटरफेस (सीजीआई)। CGI प्रोग्रामिंग ट्यूटोरियल एक प्रोग्रामिंग भाषा चुनना

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

इंटरनेट सूचना के वितरण के लिए एक आदर्श माध्यम साबित हुआ है, जैसा कि इसकी अपार लोकप्रियता और व्यापक विकास में देखा गया है। जबकि कुछ ने इंटरनेट की उपयोगिता पर सवाल उठाया है, और इसके व्यापक विकास और लोकप्रियता का श्रेय मुख्य रूप से दखल देने वाले विज्ञापन को दिया है, इंटरनेट सभी प्रकार की सूचनाओं को प्रस्तुत करने का एक महत्वपूर्ण माध्यम है। इलेक्ट्रॉनिक रूप में नवीनतम जानकारी (समाचार, मौसम, वास्तविक समय के खेल आयोजन) और संदर्भ सामग्री प्रदान करने के लिए न केवल कई सेवाएं हैं, बल्कि एक अन्य प्रकार के डेटा की एक महत्वपूर्ण मात्रा भी है। आईआरएस, जिसने वर्ल्ड वाइड वेब के माध्यम से अपने सभी 1995 टैक्स रिटर्न फॉर्म और अन्य जानकारी प्रसारित की, ने हाल ही में अपनी वेब साइट के प्रशंसकों से पत्र प्राप्त करना स्वीकार किया। किसने सोचा होगा कि आईआरएस को कभी फैन मेल प्राप्त होगा? ऐसा इसलिए नहीं था क्योंकि उनकी वेबसाइट को अच्छी तरह से डिजाइन किया गया था, बल्कि इसलिए कि यह लाखों लोगों के लिए नहीं तो हजारों लोगों के लिए वास्तव में उपयोगी टूल साबित हुई।

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

जानकारी को प्रस्तुत करने और वितरित करने के इस सरल और अनूठे तरीके से लगभग हर कोई लाभान्वित हो सकता है, शिक्षाविदों से जो तुरंत अपने साथियों के साथ डेटा साझा करना चाहते हैं, जो सभी के साथ अपनी कंपनी के बारे में जानकारी साझा करते हैं। हालाँकि, जबकि जानकारी प्रदान करना अत्यंत महत्वपूर्ण है, पिछले कुछ वर्षों में कई लोगों ने महसूस किया है कि जानकारी प्राप्त करना एक समान रूप से महत्वपूर्ण प्रक्रिया है।

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

उपयोगकर्ताओं से इनपुट प्राप्त करने और जानकारी प्रदान करने की क्षमता के बिना, वेब पूरी तरह से स्थिर वातावरण होगा। जानकारी केवल लेखक द्वारा निर्दिष्ट प्रारूप में उपलब्ध होगी। यह सामान्य रूप से कम्प्यूटेशनल संभावनाओं में से एक को कमजोर कर देगा: इंटरैक्टिव जानकारी। उदाहरण के लिए, उपयोगकर्ता को एक से अधिक दस्तावेज़ देखने के लिए बाध्य करने के बजाय, जैसे कि वह कोई पुस्तक या शब्दकोश देख रहा हो, बेहतर होगा कि उपयोगकर्ता को उनकी रुचि के विषय पर कीवर्ड की पहचान करने दें। उपयोगकर्ता सामग्री प्रदाता द्वारा परिभाषित कठोर संरचना पर निर्भर होने के बजाय डेटा की प्रस्तुति को अनुकूलित कर सकते हैं।

शब्द "वेब सर्वर" भ्रामक हो सकता है क्योंकि यह भौतिक मशीन और इंटरनेट ब्राउज़र के साथ संचार करने के लिए उपयोग किए जाने वाले सॉफ़्टवेयर दोनों को संदर्भित कर सकता है। जब कोई ब्राउज़र किसी दिए गए वेब पते का अनुरोध करता है, तो वह पहले इंटरनेट पर मशीन से जुड़ता है, वेब सर्वर सॉफ़्टवेयर को दस्तावेज़ के लिए अनुरोध भेजता है। यह सॉफ्टवेयर लगातार चलता है, ऐसे अनुरोधों की प्रतीक्षा करता है और तदनुसार प्रतिक्रिया करता है।

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

सर्वर को इंटरनेट ब्राउज़र में फ़ाइलों को खोजने और भेजने के अलावा अन्य संचालन करने में सक्षम होने के लिए, आपको यह जानना होगा कि सर्वर की कार्यक्षमता को कैसे बढ़ाया जाए। उदाहरण के लिए, एक वेब सर्वर किसी उपयोगकर्ता द्वारा दर्ज किए गए कीवर्ड के आधार पर डेटाबेस की खोज नहीं कर सकता है और कई मेल खाने वाले दस्तावेज़ वापस नहीं कर सकता है जब तक कि सर्वर के लिए ऐसी क्षमता को किसी तरह से प्रोग्राम नहीं किया गया हो।

सीजीआई क्या है?

कॉमन गेटवे इंटरफेस (सीजीआई) सर्वर के लिए एक इंटरफेस है जो आपको सर्वर की कार्यक्षमता का विस्तार करने की अनुमति देता है। CGI का उपयोग करके, आप उन उपयोगकर्ताओं के साथ अंतःक्रियात्मक रूप से काम कर सकते हैं जो आपकी साइट पर आते हैं। सैद्धांतिक स्तर पर, CGI आपको ब्राउज़र इनपुट को पार्स (व्याख्या) करने और उपयोगकर्ता इनपुट के आधार पर जानकारी वापस करने के लिए सर्वर की क्षमता का विस्तार करने की अनुमति देता है। व्यावहारिक स्तर पर, CGI एक इंटरफ़ेस है जो एक प्रोग्रामर को प्रोग्राम लिखने की अनुमति देता है जो आसानी से एक सर्वर के साथ संचार करता है।

आमतौर पर, सर्वर की क्षमताओं का विस्तार करने के लिए, आपको सर्वर को स्वयं संशोधित करना होगा। यह समाधान वांछनीय नहीं है क्योंकि इसके लिए इंटरनेट प्रोटोकॉल नेटवर्क प्रोग्रामिंग की निचली परत की समझ की आवश्यकता होती है। इसके लिए सर्वर स्रोत को संपादित करने और पुन: संकलित करने या प्रत्येक कार्य के लिए एक कस्टम सर्वर लिखने की भी आवश्यकता होगी। मान लें कि आप अपने सर्वर की क्षमताओं का विस्तार करना चाहते हैं ताकि यह वेब-टू-ई-मेल (वेब ​​से ईमेल) गेटवे के रूप में कार्य करे, ब्राउज़र से उपयोगकर्ता द्वारा दर्ज की गई जानकारी को खींचकर किसी अन्य उपयोगकर्ता को ईमेल कर दे। सर्वर को ब्राउज़र से इनपुट को पार्स करने के लिए कोड डालना होगा, इसे किसी अन्य उपयोगकर्ता को ईमेल करना होगा, और नेटवर्क कनेक्शन पर ब्राउज़र को प्रतिक्रिया वापस भेजनी होगी।

सबसे पहले, ऐसे कार्य के लिए सर्वर कोड तक पहुंच की आवश्यकता होती है, जो हमेशा संभव नहीं होता है।

दूसरे, यह कठिन है और इसके लिए व्यापक तकनीकी ज्ञान की आवश्यकता होती है।

तीसरा, यह केवल एक विशिष्ट सर्वर के लिए लागू होता है। यदि आपको अपने सर्वर को किसी अन्य प्लेटफ़ॉर्म पर ले जाने की आवश्यकता है, तो आपको उठना और दौड़ना होगा, या कम से कम उस प्लेटफ़ॉर्म पर अपना कोड पोर्ट करने में बहुत समय लगाना होगा।

सीजीआई क्यों?

CGI इन समस्याओं का एक पोर्टेबल और सरल समाधान प्रदान करता है। CGI प्रोटोकॉल प्रोग्राम के लिए एक वेब सर्वर के साथ संचार करने के लिए एक मानक तरीका परिभाषित करता है। बिना किसी विशेष ज्ञान के, आप किसी भी मशीनी भाषा में प्रोग्राम लिख सकते हैं जो वेब सर्वर के साथ इंटरफेस और संचार करता है। यह प्रोग्राम उन सभी वेब सर्वरों के साथ काम करेगा जो सीजीआई प्रोटोकॉल को समझते हैं।

CGI संचार मानक इनपुट और आउटपुट के साथ किया जाता है, जिसका अर्थ है कि यदि आप अपनी प्रोग्रामिंग भाषा का उपयोग करके डेटा को प्रिंट और पढ़ना जानते हैं, तो आप एक वेब सर्वर एप्लिकेशन लिख सकते हैं। इनपुट और आउटपुट को पार्स करने के अलावा, सीजीआई एप्लिकेशन प्रोग्रामिंग किसी भी अन्य एप्लिकेशन प्रोग्रामिंग के बराबर है। उदाहरण के लिए, "हैलो, वर्ल्ड!" प्रोग्राम को प्रोग्राम करने के लिए, आप उपयुक्त संदेश को प्रिंट करने के लिए अपनी भाषा के प्रिंट फ़ंक्शंस और सीजीआई प्रोग्राम के लिए परिभाषित प्रारूप का उपयोग करते हैं।

प्रोग्रामिंग भाषा का विकल्प

चूँकि CGI एक सामान्य इंटरफ़ेस है, आप किसी विशेष मशीनी भाषा तक सीमित नहीं हैं। एक महत्वपूर्ण प्रश्न अक्सर पूछा जाता है: सीजीआई प्रोग्रामिंग के लिए आप किन प्रोग्रामिंग भाषाओं का उपयोग कर सकते हैं? आप किसी भी भाषा का उपयोग कर सकते हैं जो आपको इसकी अनुमति देती है:

  • मानक आउटपुट पर प्रिंट करें
  • स्टडिन से पढ़ें
  • परिवर्तनीय मोड से पढ़ें

लगभग सभी प्रोग्रामिंग लैंग्वेज और कई स्क्रिप्टिंग लैंग्वेज ये तीन काम करती हैं, और आप इनमें से किसी का भी इस्तेमाल कर सकते हैं।

भाषाएँ निम्नलिखित दो वर्गों में से एक में आती हैं: अनुवाद योग्य और व्याख्यायित। एक अनुवादित भाषा - उदाहरण के लिए, सी या सी ++ आमतौर पर छोटी और तेज होती है, जबकि पर्ल या रेक्स जैसी व्याख्या की गई भाषाओं को स्टार्टअप पर लोड करने के लिए कभी-कभी एक बड़े दुभाषिया की आवश्यकता होती है। इसके अतिरिक्त, यदि आपकी भाषा अनुवाद योग्य है, तो आप स्रोत कोड के बिना बायनेरिज़ (मशीन भाषा में अनुवादित कोड) वितरित कर सकते हैं। व्याख्या की गई लिपियों के वितरण का अर्थ आमतौर पर स्रोत कोड का वितरण होता है।

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

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

CGI प्रोग्रामिंग के लिए सबसे उपयुक्त भाषा कौन सी है? प्रोग्रामिंग के मामले में जो आपको लगता है वह आपके लिए अधिक सुविधाजनक है। दोनों सीजीआई अनुप्रयोगों की प्रोग्रामिंग के लिए समान रूप से प्रभावी हैं, और उचित पुस्तकालयों के साथ, दोनों में समान क्षमताएं हैं। हालांकि, अगर आपके पास पहुंचने में मुश्किल सर्वर है, तो आप छोटे संकलित सी प्रोग्राम का उपयोग कर सकते हैं।

चेतावनियां

CGI अनुप्रयोगों के कुछ महत्वपूर्ण विकल्प हैं। कई सर्वरों में अब एपीआई प्रोग्रामिंग शामिल है, जो स्टैंडअलोन सीजीआई अनुप्रयोगों के विपरीत सीधे सर्वर एक्सटेंशन को प्रोग्राम करना आसान बनाता है। एपीआई सर्वर आमतौर पर सीजीआई कार्यक्रमों की तुलना में अधिक कुशल होते हैं। अन्य सर्वरों में अंतर्निहित कार्यक्षमता शामिल होती है जो विशेष गैर-सीजीआई तत्वों को संभाल सकती है, जैसे डेटाबेस इंटरफेसिंग। अंत में, कुछ अनुप्रयोगों को जावा जैसी कुछ नई क्लाइंट-साइड (सर्वर-साइड के बजाय) तकनीकों द्वारा प्रस्तुत किया जा सकता है। प्रौद्योगिकी में इस तरह के तेजी से बदलाव के सामने क्या सीजीआई जल्दी अप्रचलित हो जाएगा?

संभावना नहीं है। नई तकनीकों की तुलना में CGI के कई फायदे हैं।

  • यह बहुमुखी और पोर्टेबल है। आप किसी भी प्लेटफॉर्म पर लगभग किसी भी प्रोग्रामिंग भाषा का उपयोग करके सीजीआई एप्लिकेशन लिख सकते हैं। कुछ विकल्प, जैसे सर्वर एपीआई, आपको कुछ भाषाओं तक सीमित कर देते हैं और सीखने में अधिक कठिन होते हैं।
  • यह संभावना नहीं है कि जावा जैसी क्लाइंट प्रौद्योगिकियां सीजीआई की जगह ले लेंगी क्योंकि कुछ एप्लिकेशन ऐसे हैं जिनके लिए सर्वर एप्लिकेशन चलाने के लिए बेहतर अनुकूल हैं।
  • CGI की कई सीमाएँ HTML या HTTP सीमाएँ हैं। जैसे-जैसे इंटरनेट के मानक सामान्य रूप से विकसित होते हैं, वैसे-वैसे सीजीआई की क्षमताएं भी विकसित होती हैं।

सारांश

कॉमन गेटवे एक प्रोटोकॉल है जिसके द्वारा प्रोग्राम वेब सर्वर के साथ इंटरैक्ट करते हैं। सीजीआई की बहुमुखी प्रतिभा प्रोग्रामर को लगभग किसी भी भाषा में गेटवे प्रोग्राम लिखने की क्षमता देती है, हालांकि विभिन्न भाषाओं से जुड़े कई ट्रेड-ऑफ हैं। इस क्षमता के बिना, इंटरैक्टिव वेब पेज बनाना मुश्किल होगा, सबसे अच्छा, सर्वर संशोधनों की आवश्यकता होगी, और अधिकांश उपयोगकर्ताओं के लिए अन्तरक्रियाशीलता दुर्गम होगी जो साइट प्रशासक नहीं हैं।

अध्याय 2. मूल बातें

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

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

इस अध्याय का उद्देश्य सीजीआई की मूल बातें एक व्यापक, यद्यपि संक्षिप्त रूप में प्रस्तुत करना है। यहां चर्चा की गई प्रत्येक अवधारणा को बाद के अध्यायों में विस्तृत किया गया है। हालाँकि, इस अध्याय को पूरा करने के बाद, आप तुरंत CGI अनुप्रयोगों की प्रोग्रामिंग शुरू कर सकते हैं। एक बार जब आप इस स्तर पर पहुंच जाते हैं, तो आप सीजीआई की पेचीदगियों को सीख सकते हैं, या तो इस पुस्तक के बाकी हिस्सों को पढ़कर, या केवल स्वयं प्रयोग करके।

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

दूसरे शब्दों में, CGI प्रोग्रामिंग को यह समझने की आवश्यकता है कि इंटरनेट ब्राउज़र से इनपुट कैसे प्राप्त किया जाए और आउटपुट को वापस कैसे भेजा जाए। CGI प्रोग्राम के इनपुट और आउटपुट चरणों के बीच क्या होता है यह डेवलपर के उद्देश्य पर निर्भर करता है। आप पाएंगे कि सीजीआई प्रोग्रामिंग में मुख्य कठिनाई इस मध्यवर्ती चरण में है; एक बार जब आप इनपुट और आउटपुट के साथ काम करना सीख जाते हैं, तो यह अनिवार्य रूप से एक CGI डेवलपर बनने के लिए पर्याप्त है।

इस अध्याय में, आप सीजीआई इनपुट और आउटपुट के पीछे के सिद्धांतों के साथ-साथ सीजीआई लिखने और उपयोग करने के लिए आवश्यक अन्य बुनियादी कौशल सीखेंगे, जिसमें एचटीएमएल फॉर्म बनाने और अपने सीजीआई कार्यक्रमों का नामकरण जैसी चीजें शामिल हैं। इस अध्याय में निम्नलिखित विषयों को शामिल किया गया है:

  • पारंपरिक कार्यक्रम "हैलो, वर्ल्ड!";
  • सीजीआई आउटपुट: इंटरनेट ब्राउज़र में प्रदर्शन के लिए जानकारी वापस भेजें;
  • एप्लिकेशन को कॉन्फ़िगर करना, इंस्टॉल करना और चलाना। आप वेब पर विभिन्न प्लेटफॉर्म और सर्वर के बारे में जानेंगे;
  • सीजीआई इनपुट: वेब ब्राउज़र द्वारा भेजी गई जानकारी की व्याख्या करना। ऐसे इनपुट को पार्स करने के लिए कुछ उपयोगी प्रोग्रामिंग लाइब्रेरी से परिचित होना;
  • एक सरल उदाहरण: इसमें इस अध्याय के सभी पाठ शामिल हैं;
  • प्रोग्रामिंग रणनीति।

इस अध्याय की प्रकृति के कारण, मैं केवल कुछ विषयों पर बात करूंगा। चिंता मत करो; इन सभी विषयों पर अन्य अध्यायों में अधिक गहराई से चर्चा की गई है।

नमस्ते दुनिया!

आप एक पारंपरिक परिचयात्मक प्रोग्रामिंग कार्य के साथ शुरू करते हैं। आप एक प्रोग्राम लिखेंगे जो "हैलो, वर्ल्ड!" प्रदर्शित करता है। आपके वेब ब्राउज़र पर। इस प्रोग्राम को लिखने से पहले, आपको यह समझना होगा कि वेब ब्राउज़र सीजीआई प्रोग्राम से कौन सी जानकारी प्राप्त करने की अपेक्षा करता है। आपको यह भी जानना होगा कि इस कार्यक्रम को क्रिया में देखने के लिए इसे कैसे निष्पादित किया जाए।

सीजीआई भाषा स्वतंत्र है, इसलिए आप इस कार्यक्रम को किसी भी भाषा में लागू कर सकते हैं। प्रत्येक भाषा की स्वतंत्रता को प्रदर्शित करने के लिए यहां कई अलग-अलग भाषाओं का उपयोग किया जाता है। पर्ल में, "हैलो, वर्ल्ड!" लिस्टिंग 2.1 में दिखाया गया है।

लिस्टिंग 2.1। नमस्ते दुनिया! पर्ल में। #! / usr / लोकल / बिन / पर्ल # Hello.cgi - मेरा पहला CGI प्रोग्राम प्रिंट "कंटेंट-टाइप: टेक्स्ट / html \ n \ n"; प्रिंट " \ n "; प्रिंट" नमस्ते दुनिया!"; प्रिंट"\ n "; प्रिंट" \ n "; प्रिंट"

नमस्ते दुनिया!

\ n "; प्रिंट" \ एन ";

इस प्रोग्राम को hello.cgi के रूप में सहेजें और इसे उपयुक्त स्थान पर स्थापित करें। (यदि आप सुनिश्चित नहीं हैं कि यह कहाँ है, तो चिंता न करें; आप इस अध्याय में बाद में "सीजीआई प्रोग्राम को स्थापित करना और चलाना" अनुभाग में पाएंगे।) अधिकांश सर्वरों के लिए, आपको जिस निर्देशिका की आवश्यकता होती है, उसे सीजीआई कहा जाता है- बिन। अब, अपने वेब ब्राउजर से प्रोग्राम को इनवाइट करें। अधिकांश के लिए, इसका अर्थ निम्नलिखित यूनिफ़ॉर्म रिसोर्स लोकेटर (URL) खोलना है:

http: //hostname/directoryname/hello.cgi

होस्टनाम आपके वेब सर्वर का नाम है, और निर्देशिका नाम वह निर्देशिका है जहां आप hello.cgi (शायद cgi-bin) डालते हैं।

hello.cgi को विभाजित करना

hello.cgi के बारे में ध्यान देने योग्य कुछ बातें हैं।

सबसे पहले, आप साधारण प्रिंट कमांड का उपयोग करते हैं। CGI प्रोग्राम को किसी विशेष फाइल डिस्क्रिप्टर या आउटपुट डिस्क्रिप्टर की आवश्यकता नहीं होती है। ब्राउज़र को आउटपुट भेजने के लिए, बस stdout पर प्रिंट करें।

दूसरा, कृपया ध्यान दें कि पहले प्रिंट स्टेटमेंट की सामग्री (सामग्री-प्रकार: टेक्स्ट / एचटीएमएल) आपके वेब ब्राउज़र पर दिखाई नहीं देती है। आप जो भी जानकारी चाहते हैं उसे वापस ब्राउज़र (एचटीएमएल पेज, ग्राफिक्स या ध्वनि) पर भेज सकते हैं, लेकिन पहले, आपको ब्राउज़र को यह बताना होगा कि आप इसे किस प्रकार का डेटा भेज रहे हैं। यह लाइन ब्राउज़र को बताती है कि किस तरह की जानकारी की उम्मीद है - इस मामले में, एक HTML पृष्ठ।

तीसरा, प्रोग्राम को hello.cgi कहा जाता है। आपको हमेशा अपने सीजीआई प्रोग्राम के नाम के साथ .cgi एक्सटेंशन का उपयोग करने की आवश्यकता नहीं है। हालांकि कई भाषाओं के लिए स्रोत कोड भी .cgi एक्सटेंशन का उपयोग करता है, इसका उपयोग भाषा के प्रकार को दर्शाने के लिए नहीं किया जाता है, लेकिन सर्वर के लिए एक ग्राफिक फ़ाइल, HTML फ़ाइल के बजाय एक फ़ाइल को निष्पादन योग्य फ़ाइल के रूप में पहचानने का एक तरीका है। , या पाठ फ़ाइल। सर्वर को अक्सर केवल उन फ़ाइलों को निष्पादित करने का प्रयास करने के लिए कॉन्फ़िगर किया जाता है जिनमें यह एक्सटेंशन होता है, अन्य सभी की सामग्री प्रदर्शित करता है। जबकि .cgi एक्सटेंशन का उपयोग करना वैकल्पिक है, फिर भी इसे अच्छा अभ्यास माना जाता है।

सामान्य तौर पर, hello.cgi के दो मुख्य भाग होते हैं:

  • ब्राउज़र को बताता है कि कौन सी जानकारी अपेक्षित है (सामग्री-प्रकार: टेक्स्ट/एचटीएमएल)
  • ब्राउज़र को बताता है कि क्या प्रदर्शित करना है (हैलो, विश्व!)

नमस्ते दुनिया! सी . में

सीजीआई कार्यक्रमों की भाषा स्वतंत्रता को स्पष्ट करने के लिए, लिस्टिंग 2.2 सी में लिखे गए hello.cgi प्रोग्राम के समकक्ष दिखाता है।

लिस्टिंग 2.2. नमस्ते दुनिया! सी में / * hello.cgi.c - हैलो, वर्ल्ड सीजीआई * / #शामिल करें int main () (प्रिंटफ ("सामग्री-प्रकार: टेक्स्ट / html \ r \ n \ r \ n"); प्रिंटफ (" \ n "); प्रिंटफ (" नमस्ते दुनिया!\ n "); प्रिंटफ ("\ n "); प्रिंटफ (" \ n "); प्रिंटफ ("

नमस्ते दुनिया!

\ n "); प्रिंटफ (" \ एन ");)

ध्यान दें

ध्यान दें कि hello.cgi का पर्ल संस्करण सामग्री-प्रकार प्रिंट ": टेक्स्ट / html \ n \ n" का उपयोग करता है; जबकि C संस्करण Printf ("सामग्री-प्रकार: टेक्स्ट / html \ r \ n \ r \ n") का उपयोग करता है;

पर्ल प्रिंट एक स्टेटमेंट को दो न्यूलाइन्स (\ n) के साथ समाप्त क्यों करता है, जबकि सी प्रिंटफ दो कैरिज रिटर्न और एक न्यूलाइन (\ r \ n) के साथ समाप्त होता है?

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

जबकि पर्ल में \ rs अपवाद तकनीकी रूप से गलत है, यह लगभग सभी प्रोटोकॉल में काम करेगा और सभी प्लेटफार्मों पर भी ले जाया जाएगा। इसलिए, इस पुस्तक के सभी पर्ल उदाहरणों में, मैं न्यूलाइन का उपयोग करता हूं, हेडर को अलग करता हूं, कैरिज रिटर्न और न्यूलाइन नहीं।

इस समस्या का एक उपयुक्त समाधान अध्याय 4, निष्कर्ष में प्रस्तुत किया गया है।

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

सीजीआई व्युत्पत्ति

अब आप वेब ब्राउज़र पर सूचना भेजने के मुद्दे पर करीब से नज़र डाल सकते हैं। हेलो, वर्ल्ड! उदाहरण से, आप देख सकते हैं कि वेब ब्राउज़र डेटा के दो सेट की अपेक्षा करते हैं: एक हेडर जिसमें जानकारी होती है जैसे कि कौन सी जानकारी प्रदर्शित करनी है (जैसे सामग्री-प्रकार: लाइन) और वास्तविक जानकारी (वेब ​​ब्राउज़र पर क्या प्रदर्शित होती है) ) सूचना के इन दो ब्लॉकों को एक रिक्त रेखा से अलग किया जाता है।

हेडर को HTTP हेडर कहा जाता है। यह उस जानकारी के बारे में महत्वपूर्ण जानकारी प्रदान करता है जो ब्राउज़र को प्राप्त होने वाली है। कई अलग-अलग प्रकार के HTTP शीर्षलेख हैं, और सबसे बहुमुखी वह है जिसे आपने पहले उपयोग किया था: सामग्री-प्रकार: शीर्षलेख। आप HTTP हेडर के विभिन्न संयोजनों का उपयोग कर सकते हैं, उन्हें कैरिज रिटर्न और न्यूलाइन कैरेक्टर (\ r \ n) से अलग कर सकते हैं। हेडर को डेटा से अलग करने वाली ब्लैंक लाइन में कैरिज रिटर्न और एक नई लाइन भी होती है (दोनों की आवश्यकता क्यों है, इसका संक्षिप्त विवरण पूर्ववर्ती नोट में और विस्तार से अध्याय 4 में दिया गया है)। आप अन्य HTTP शीर्षलेखों के बारे में अध्याय 4 में सीखेंगे; आप वर्तमान में सामग्री-प्रकार: शीर्षलेख पर काम कर रहे हैं।

सामग्री-प्रकार: शीर्षलेख सीजीआई द्वारा लौटाए जाने वाले डेटा के प्रकार का वर्णन करता है। इस हेडर के लिए उपयुक्त प्रारूप है:

सामग्री-प्रकार: उपप्रकार / प्रकार

जहाँ उपप्रकार / प्रकार सही बहुउद्देशीय इंटरनेट मेल एक्सटेंशन (MIME) प्रकार है। सबसे आम MIME प्रकार HTML है: टेक्स्ट / html। तालिका 2.1 कुछ और सामान्य MIME प्रकारों को सूचीबद्ध करती है जिन पर चर्चा की जाएगी; MIME प्रकारों की अधिक संपूर्ण सूची और विश्लेषण अध्याय 4 में दिया गया है।

ध्यान दें

MIME का आविष्कार मूल रूप से मेल संदेशों के मुख्य भाग की सामग्री का वर्णन करने के लिए किया गया था। यह सामग्री-प्रकार की जानकारी का प्रतिनिधित्व करने का एक सामान्य तरीका बन गया है। आप माइम के बारे में RFC1521 में अधिक पढ़ सकते हैं। इंटरनेट पर आरएफसी "टिप्पणी के लिए अनुरोध" के लिए खड़ा है, जो मानकों को निर्धारित करने की कोशिश कर रहे इंटरनेट पर समूहों द्वारा किए गए निर्णयों का सारांश है। RFC1521 परिणाम निम्न URL पर देखे जा सकते हैं: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

तालिका 2.1. कुछ सामान्य MIME प्रकार। माइम टाइप विवरण टेक्स्ट / एचटीएमएल हाइपरटेक्स्ट मार्कअप लैंग्वेज (एचटीएमएल) टेक्स्ट / प्लेन प्लेन टेक्स्ट फाइल्स इमेज / जीआईएफ ग्राफिक फाइल्स जीआईएफ इमेज / जेपीईजी कंप्रेस्ड ग्राफिक फाइल्स जेपीईजी ऑडियो / बेसिक सन ऑडियो फाइल्स * .au ऑडियो / एक्स-वेव विंडोज *। wav

शीर्षक और एक रिक्त पंक्ति के बाद, आप केवल उस रूप में डेटा प्रिंट करते हैं जिसकी आपको आवश्यकता होती है। यदि आप HTML भेज रहे हैं, तो हेडर के बाद HTML टैग्स और डेटा को stdout में प्रिंट करें। आप फ़ाइल की सामग्री को केवल stdout पर प्रिंट करके ग्राफिक्स, ध्वनि और अन्य बायनेरिज़ भी भेज सकते हैं। इसके कुछ उदाहरण अध्याय 4 में दिए गए हैं।

CGI प्रोग्राम को इंस्टाल करना और चलाना

यह खंड सीजीआई प्रोग्रामिंग से कुछ हद तक विचलित होता है और सीजीआई का उपयोग करने, प्रोग्राम स्थापित करने और चलाने के लिए आपके वेब सर्वर को कॉन्फ़िगर करने के बारे में बात करता है। आप अलग-अलग प्लेटफॉर्म के लिए अलग-अलग सर्वरों से कम या ज्यादा विस्तार से परिचित होंगे, लेकिन सबसे अच्छा विकल्प खोजने के लिए आपको अपने सर्वर प्रलेखन का गहराई से अध्ययन करना होगा।

सभी सर्वरों को सर्वर फ़ाइलों के लिए स्थान और HTML दस्तावेज़ों के लिए स्थान की आवश्यकता होती है। इस बुक में सर्वर एरिया को ServerRoot और Document क्षेत्र को DocumentRoot कहा जाता है। UNIX मशीनों पर, ServerRoot आमतौर पर / usr / लोकल / आदि / httpd / में होता है और DocumentRoot आमतौर पर / usr / लोकल / आदि / httpd / htdocs / में होता है। हालाँकि, इससे आपके सिस्टम पर कोई फर्क नहीं पड़ता है, इसलिए ServerRoot और DocumentRoot के सभी संदर्भों को अपने स्वयं के ServerRoot और DocumentRoot से बदलें।

जब आप अपने वेब ब्राउज़र का उपयोग करके फ़ाइलों तक पहुँच प्राप्त करते हैं, तो आप फ़ाइल को DocumentRoot के सापेक्ष URL में निर्दिष्ट करते हैं। उदाहरण के लिए, यदि आपके सर्वर का पता mymachine.org है, तो आप इस फ़ाइल को निम्न URL के साथ देखें: http://mymachine.org/index.html

सीजीआई के लिए सर्वर विन्यास

अधिकांश वेब सर्वर CGI प्रोग्राम का उपयोग करने के लिए पूर्व-कॉन्फ़िगर किए गए हैं। आमतौर पर दो पैरामीटर सर्वर को बताते हैं कि फाइल एक सीजीआई एप्लीकेशन है या नहीं:

  • निर्दिष्ट निर्देशिका। कुछ सर्वर आपको यह निर्दिष्ट करने की अनुमति देते हैं कि निर्दिष्ट निर्देशिका में सभी फ़ाइलें (आमतौर पर डिफ़ॉल्ट रूप से cgi-bin कहा जाता है) CGI हैं।
  • फ़ाइल नाम एक्सटेंशन। कई सर्वर .cgi में समाप्त होने वाली सभी फ़ाइलों को CGI के रूप में परिभाषित करने के लिए पूर्व-कॉन्फ़िगर किए गए हैं।

निर्दिष्ट निर्देशिका विधि कुछ हद तक अतीत का अवशेष है (बहुत शुरुआती सर्वरों ने इसे केवल यह निर्धारित करने के लिए उपयोग किया था कि कौन सी फाइलें सीजीआई प्रोग्राम थीं), लेकिन इसके कई फायदे हैं।

  • यह सीजीआई कार्यक्रमों को केंद्रीकृत रखता है, अन्य निर्देशिकाओं को अव्यवस्थित होने से रोकता है।
  • आप किसी विशेष फ़ाइल नाम एक्सटेंशन तक सीमित नहीं हैं, इसलिए आप फ़ाइलों को जो चाहें नाम दे सकते हैं। कुछ सर्वर आपको कई अलग-अलग निर्देशिकाओं को CGI निर्देशिकाओं के रूप में नामित करने की अनुमति देते हैं।
  • यह आपको इस पर अधिक नियंत्रण भी देता है कि कौन सीजीआई रिकॉर्ड कर सकता है। उदाहरण के लिए, यदि आपके पास एक सर्वर है और कई उपयोगकर्ताओं के साथ एक सिस्टम बनाए रखता है और नहीं चाहते कि वे सुरक्षा कारणों से प्रोग्राम को पहले संशोधित किए बिना अपनी स्वयं की सीजीआई स्क्रिप्ट का उपयोग करें, तो आप केवल उन फाइलों को सीमित, केंद्रीकृत निर्देशिका में सीजीआई के रूप में नामित कर सकते हैं। उपयोगकर्ताओं को तब आपको स्थापित करने के लिए एक CGI प्रोग्राम प्रदान करने की आवश्यकता होगी और आप यह सुनिश्चित करने के लिए पहले कोड को संशोधित कर सकते हैं कि प्रोग्राम में कोई बड़ी सुरक्षा समस्या नहीं है।

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

चेतावनी

CGI के लिए अपने सर्वर को कॉन्फ़िगर करते समय सुरक्षा के महत्व को याद रखें। कुछ युक्तियों को यहां शामिल किया जाएगा, और अध्याय 9, "सीजीआई सुरक्षित करना", इन पहलुओं को अधिक विस्तार से शामिल करता है।

यूनिक्स सर्वर पर सीजीआई स्थापित करना

भले ही आपका UNIX सर्वर कैसे कॉन्फ़िगर किया गया हो, यह सुनिश्चित करने के लिए कई कदम उठाने होंगे कि आपके CGI अनुप्रयोग अपेक्षित रूप से चल रहे हैं। आपका वेब सर्वर आमतौर पर एक गैर-मौजूद उपयोगकर्ता के रूप में चलेगा (अर्थात, UNIX उपयोगकर्ता कोई भी ऐसा खाता नहीं है जिसके पास फ़ाइल तक पहुँचने की अनुमति नहीं है और इसे पंजीकृत नहीं किया जा सकता है)। CGI स्क्रिप्ट (पर्ल, बॉर्न शेल, या किसी अन्य स्क्रिप्टिंग भाषा में लिखी गई) विश्वव्यापी, निष्पादन योग्य और पठनीय होनी चाहिए।

तत्पर

अपनी फ़ाइलों को दुनिया भर में पढ़ने योग्य और निष्पादन योग्य बनाने के लिए, निम्न UNIX कमांड अनुमतियों का उपयोग करें: chmod 755 फ़ाइल नाम।

यदि आप पर्ल या टीसीएल जैसी स्क्रिप्टिंग भाषा का उपयोग कर रहे हैं, तो अपनी स्क्रिप्ट की पहली पंक्ति में अपने दुभाषिया का पूरा पथ शामिल करें। उदाहरण के लिए, / usr / स्थानीय / बिन निर्देशिका में पर्ल का उपयोग करने वाली एक पर्ल स्क्रिप्ट निम्न पंक्ति से शुरू होनी चाहिए:

#! / usr / स्थानीय / बिन / पर्ल

चेतावनी

कभी भी दुभाषिया (perl, या Tcl विश बाइनरी / cgi-bin में न रखें। यह आपके सिस्टम पर सुरक्षा जोखिम पैदा करता है। विवरण के लिए अध्याय 9 देखें)।

कुछ सामान्य यूनिक्स सर्वर

एनसीएसए और अपाचे सर्वर में समान कॉन्फ़िगरेशन फ़ाइलें हैं क्योंकि अपाचे मूल रूप से एनसीएसए कोड पर आधारित था। डिफ़ॉल्ट रूप से, उन्हें कॉन्फ़िगर किया जाता है ताकि cgi-bin निर्देशिका (सर्वर रूट में डिफ़ॉल्ट रूप से स्थित) में कोई भी फ़ाइल एक CGI प्रोग्राम हो। cgi-bin निर्देशिका का स्थान बदलने के लिए, आप conf / srm.conf विन्यास फाइल को संपादित कर सकते हैं। इस निर्देशिका को कॉन्फ़िगर करने का प्रारूप है

स्क्रिप्टअलियास नकलीनिर्देशिकानाम वास्तविकनिर्देशिकानाम

जहां fakedirectoryname निर्देशिका (/ cgi-bin) का छद्म नाम है, और realdirectoryname वह पूर्ण पथ है जहां CGI प्रोग्राम वास्तव में संग्रहीत होते हैं। आप अधिक ScriptAlias ​​​​पंक्तियों को जोड़कर एक से अधिक ScriptAlias ​​​​कॉन्फ़िगर कर सकते हैं।

डिफ़ॉल्ट कॉन्फ़िगरेशन अधिकांश उपयोगकर्ताओं की आवश्यकताओं के लिए पर्याप्त है। सही realdirectoryname निर्धारित करने के लिए आपको वैसे भी srm.conf फ़ाइल में लाइन को संपादित करने की आवश्यकता है। यदि, उदाहरण के लिए, आपके CGI प्रोग्राम / usr / local / etc / httpd / cgi-bin में स्थित हैं, तो आपकी srm.conf फ़ाइल में ScriptAlias ​​​​लाइन इस तरह दिखनी चाहिए:

ScriptAlias ​​​​/ cgi-bin // usr / स्थानीय / आदि / httpd / cgi-bin /

इस निर्देशिका में स्थित सीजीआई कार्यक्रमों तक पहुंचने या लिंक करने के लिए निम्नलिखित यूआरएल का उपयोग किया जाता है:

एचटीपी: // होस्टनाम / सीजीआई-बिन / प्रोग्रामनाम

जहां होस्टनाम आपके वेब सर्वर का होस्टनाम है और प्रोग्रामनाम आपके सीजीआई का नाम है।

उदाहरण के लिए, मान लें कि आपने www.company.com नामक अपने वेब सर्वर पर hello.cgi प्रोग्राम को अपनी cgi-bin निर्देशिका (उदाहरण के लिए, / usr / local / etc / httpd / cgi-bin) में कॉपी किया है। अपने सीजीआई तक पहुंचने के लिए निम्नलिखित यूआरएल का उपयोग करें: http://www.company.com/cgi-bin/hello.cgi

यदि आप किसी .cgi फ़ाइल को CGI के रूप में पहचानने के लिए अपने NCSA या Apache सर्वर को कॉन्फ़िगर करना चाहते हैं, तो आपको दो कॉन्फ़िगरेशन फ़ाइलों को संपादित करने की आवश्यकता है। सबसे पहले, अपनी srm.conf फ़ाइल में, निम्न पंक्ति को बिना टिप्पणी के छोड़ दें:

AddType एप्लिकेशन / x-httpd-cgi .cgi

यह MIME टाइप CGI को .cgi एक्सटेंशन से बाइंड कर देगा। अब, आपको access.conf फ़ाइल को संशोधित करने की आवश्यकता है ताकि आप किसी भी निर्देशिका में CGI निष्पादित कर सकें। ऐसा करने के लिए, ExecCGI विकल्प को विकल्प पंक्ति में जोड़ें। यह निम्न पंक्ति की तरह कुछ दिखाई देगा:

ऑप्शन इंडेक्स फॉलो सिमलिंक्स ExecCGI

अब, .cgi एक्सटेंशन वाली कोई भी फ़ाइल CGI मानी जाती है; इसे एक्सेस करें क्योंकि आप अपने सर्वर पर किसी भी फाइल को एक्सेस करेंगे।

CERN सर्वर उसी तरह कॉन्फ़िगर किया गया है जैसे Apache और NCSA सर्वर। ScriptAlias ​​​​के बजाय, CERN सर्वर Exec कमांड का उपयोग करता है। उदाहरण के लिए, httpd.conf फ़ाइल में, आप निम्न पंक्ति देखेंगे:

निष्पादन / सीजीआई-बिन / * / यूएसआर / स्थानीय / आदि / httpd / सीजीआई-बिन / *

अन्य UNIX सर्वरों को उसी तरह कॉन्फ़िगर किया जा सकता है; अधिक जानकारी के लिए सर्वर दस्तावेज़ देखें।

विंडोज़ पर सीजीआई स्थापित करना

Windows 3.1, Windows 95, और Windows NT के लिए उपलब्ध अधिकांश सर्वर CGI पहचान के लिए फ़ाइल नाम एक्सटेंशन विधि के साथ कॉन्फ़िगर किए गए हैं। सामान्य तौर पर, विंडोज-आधारित सर्वर के कॉन्फ़िगरेशन को बदलने के लिए बस सर्वर कॉन्फ़िगरेशन प्रोग्राम चलाने और उचित परिवर्तन करने की आवश्यकता होती है।

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

यदि सर्वर इस प्रकार की फ़ाइल संबद्धता नहीं करता है, तो आप एक रैपर बैच फ़ाइल को परिभाषित कर सकते हैं जो एक दुभाषिया और एक स्क्रिप्ट दोनों को आमंत्रित करती है। UNIX सर्वर की तरह, दुभाषिया को cgi-bin निर्देशिका या किसी वेब पहुँच योग्य निर्देशिका में स्थापित न करें।

Macintosh . पर CGI स्थापित करना

Macintosh के लिए दो सबसे प्रसिद्ध सर्वर विकल्प WebStar StarNine और इसके पूर्ववर्ती MacHTTP हैं। दोनों फ़ाइल नाम एक्सटेंशन द्वारा CGI को पहचानते हैं।

MacHTTP दो अलग-अलग एक्सटेंशन को समझता है: .cgi और .acgi, जो एसिंक्रोनस CGI के लिए है। Macintosh (.cgi एक्सटेंशन के साथ) पर स्थापित नियमित CGI प्रोग्राम वेब सर्वर को तब तक व्यस्त रखेंगे जब तक कि CGI समाप्त नहीं हो जाता, सर्वर को अन्य सभी अनुरोधों को निलंबित करने के लिए मजबूर करता है। दूसरी ओर, एसिंक्रोनस सीजीआई सर्वर को चलने के दौरान भी अनुरोध स्वीकार करने की अनुमति देता है।

इनमें से किसी भी वेब सर्वर का उपयोग करने वाले Macintosh CGI डेवलपर को, जब भी संभव हो, .cgi एक्सटेंशन के बजाय .acgi एक्सटेंशन का उपयोग करना चाहिए। इसे अधिकांश सीजीआई कार्यक्रमों के साथ काम करना चाहिए; अगर यह काम नहीं करता है, तो प्रोग्राम का नाम बदलकर .cgi कर दें।

सीजीआई निष्पादन

एक बार जब आप सीजीआई स्थापित कर लेते हैं, तो इसे पूरा करने के कई तरीके हैं। यदि आपका केवल-आउटपुट CGI प्रोग्राम हैलो, वर्ल्ड! प्रोग्राम की तरह है, तो आप केवल इसके URL तक पहुँच कर इसे निष्पादित कर सकते हैं।

अधिकांश प्रोग्राम एक HTML फॉर्म में सर्वर-साइड एप्लिकेशन के रूप में चलते हैं। इससे पहले कि आप इन प्रपत्रों से जानकारी प्राप्त करना सीखें, पहले ऐसे प्रपत्र बनाने का संक्षिप्त परिचय पढ़ें।

HTML रूपों पर त्वरित ट्यूटोरियल

HTML फॉर्म में दो सबसे महत्वपूर्ण टैग टैग हैं

तथा ... आप केवल इन दो टैग का उपयोग करके अधिकांश HTML प्रपत्र बना सकते हैं। इस अध्याय में, आप इन टैगों और संभावित प्रकारों या विशेषताओं के एक छोटे उपसमुच्चय का पता लगाएंगे। ... संपूर्ण ट्यूटोरियल और HTML प्रपत्रों के संदर्भ के लिए, अध्याय 3, HTML और प्रपत्र देखें।

उपनाम

उपनाम यह निर्धारित करने के लिए प्रयोग किया जाता है कि उपयोगकर्ता द्वारा दर्ज की गई जानकारी के लिए HTML फ़ाइल के किस भाग का उपयोग किया जाना चाहिए। यह संदर्भित करता है कि अधिकांश HTML पृष्ठ CGI प्रोग्राम को कैसे कहते हैं। टैग विशेषताएँ प्रोग्राम के नाम और स्थान को या तो स्थानीय रूप से या पूर्ण URL के रूप में, उपयोग किए गए एन्कोडिंग के प्रकार और प्रोग्राम द्वारा उपयोग किए जाने वाले डेटा को स्थानांतरित करने की विधि को परिभाषित करती हैं।

अगली पंक्ति टैग के लिए विशिष्टताओं को दर्शाती है :

< ACTION FORM = "url" METHOD = ENCTYPE = "..." >

ENCTYPE विशेषता एक विशेष भूमिका नहीं निभाती है और आमतौर पर टैग के साथ शामिल नहीं होती है ... ENCTYPE टैग पर विवरण अध्याय 3 में दिया गया है। ENCTYPEs का उपयोग करने का एक तरीका अध्याय 14, "स्वामित्व विस्तार" में दिखाया गया है।

ACTION विशेषता CGI प्रोग्राम के URL को संदर्भित करती है। उपयोगकर्ता द्वारा फॉर्म भरने और जानकारी प्रदान करने के बाद, सभी सूचनाओं को एन्कोड किया जाता है और सीजीआई कार्यक्रम को प्रेषित किया जाता है। सीजीआई कार्यक्रम ही डिकोडिंग और सूचना प्रसंस्करण के प्रश्न को हल करता है; इस अध्याय में बाद में "ब्राउज़र से इनपुट स्वीकार करना" में चर्चा की गई है।

अंत में, METHOD विशेषता बताती है कि CGI प्रोग्राम को इनपुट कैसे प्राप्त करना चाहिए। ये दो तरीके - GET और POST - CGI प्रोग्राम को जानकारी कैसे पास करते हैं, में भिन्न हैं। दोनों की चर्चा "ब्राउज़र से इनपुट स्वीकार करना" में की गई है।

ब्राउज़र के लिए उपयोगकर्ता इनपुट की अनुमति देने में सक्षम होने के लिए, सभी फॉर्म टैग और जानकारी को टैग से घिरा होना चाहिए ... अंतिम टैग मत भूलना

फॉर्म के अंत को इंगित करने के लिए। आपके पास किसी प्रपत्र के भीतर कोई प्रपत्र नहीं हो सकता है, हालांकि आप एक ऐसा प्रपत्र सेट कर सकते हैं जो आपको विभिन्न स्थानों पर जानकारी के टुकड़े प्रस्तुत करने की अनुमति देता है; अध्याय 3 में इस पहलू पर विस्तार से चर्चा की गई है।

उपनाम

आप टैग का उपयोग करके टेक्स्ट इनपुट स्ट्रिप्स, रेडियो बटन, चेकबॉक्स और इनपुट स्वीकार करने के अन्य माध्यम बना सकते हैं ... यह खंड केवल टेक्स्ट इनपुट फ़ील्ड को कवर करता है। इस फ़ील्ड को लागू करने के लिए, टैग का उपयोग करें निम्नलिखित विशेषताओं के साथ:

< INPUT TYPE=text NAME = "... " VALUE = "... " SIZE = MAXLENGTH = >

NAME उस चर का प्रतीकात्मक नाम है जिसमें उपयोगकर्ता द्वारा दर्ज किया गया मान होता है। यदि आप VALUE विशेषता में टेक्स्ट शामिल करते हैं, तो वह टेक्स्ट टेक्स्ट इनपुट फ़ील्ड में डिफ़ॉल्ट के रूप में रखा जाएगा। SIZE विशेषता आपको इनपुट फ़ील्ड की क्षैतिज लंबाई को परिभाषित करने की अनुमति देती है क्योंकि यह ब्राउज़र विंडो में दिखाई देगी। अंत में, MAXLENGTH अधिकतम वर्णों को परिभाषित करता है जिसे उपयोगकर्ता फ़ील्ड में दर्ज कर सकता है। ध्यान दें कि VALUE, SIZE, MAXLENGTH विशेषताएँ वैकल्पिक हैं।

फॉर्म जमा करना

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

< Input type=submit >

यह टैग आपके फॉर्म के अंदर सबमिट बटन बनाता है। जब उपयोगकर्ता फ़ॉर्म भरना समाप्त कर लेता है, तो वह सबमिट बटन पर क्लिक करके फ़ॉर्म की ACTION विशेषता द्वारा निर्दिष्ट URL पर अपनी सामग्री सबमिट कर सकता है।

ब्राउज़र इनपुट स्वीकार करना

ऊपर एक सीजीआई प्रोग्राम लिखने के उदाहरण थे जो सर्वर से ब्राउज़र को जानकारी भेजता है। वास्तव में, एक CGI प्रोग्राम जो केवल डेटा आउटपुट करता है, उसके कई अनुप्रयोग नहीं होते हैं (कुछ उदाहरण अध्याय 4 में दिए गए हैं)। सीजीआई की अधिक महत्वपूर्ण क्षमता ब्राउज़र से जानकारी प्राप्त करना है - एक ऐसी सुविधा जो वेब को इंटरैक्टिव बनाती है।

CGI प्रोग्राम ब्राउज़र से दो प्रकार की जानकारी प्राप्त करता है।

  • सबसे पहले, यह ब्राउज़र के बारे में जानकारी के विभिन्न टुकड़े प्राप्त करता है (इसका प्रकार, यह क्या देख सकता है, मेजबान का मेजबान, और इसी तरह), सर्वर (इसका नाम और संस्करण, इसका निष्पादन बंदरगाह, और इसी तरह), और सीधे के बारे में सीजीआई कार्यक्रम (कार्यक्रम का नाम और यह कहाँ स्थित है)। सर्वर यह सारी जानकारी पर्यावरण चर के माध्यम से सीजीआई प्रोग्राम को देता है।
  • दूसरा, सीजीआई कार्यक्रम उपयोगकर्ता द्वारा दर्ज की गई जानकारी प्राप्त कर सकता है। ब्राउज़र द्वारा एन्कोड किए जाने के बाद, यह जानकारी या तो एक पर्यावरण चर (जीईटी विधि) या मानक इनपुट (स्टडिन-पोस्ट विधि) के माध्यम से भेजी जाती है।

पर्यावरण चर

यह जानना उपयोगी है कि प्रशिक्षण के दौरान और डिबगिंग के लिए, CGI कार्यक्रम के लिए कौन से पर्यावरण चर उपलब्ध हैं। तालिका 2.2 कुछ उपलब्ध सीजीआई पर्यावरण चरों को सूचीबद्ध करती है। आप एक सीजीआई प्रोग्राम भी लिख सकते हैं जो वेब ब्राउजर में पर्यावरण चर और उनके मूल्यों को आउटपुट करता है।

तालिका 2.2. कुछ महत्वपूर्ण CGI पर्यावरण चर पर्यावरण चर उद्देश्य REMOTE_ADDR क्लाइंट मशीन का IP पता। REMOTE_HOST क्लाइंट मशीन का होस्ट होस्ट। HTTP _ACCEPT उन MIME डेटा प्रकारों को सूचीबद्ध करता है जिनकी ब्राउज़र व्याख्या कर सकता है। HTTP _USER_AGENT ब्राउज़र जानकारी (ब्राउज़र प्रकार, संस्करण संख्या, ऑपरेटिंग सिस्टम, आदि)। REQUEST_METHOD प्राप्त करें या पोस्ट करें। CONTENT_LENGTH POST के माध्यम से भेजे जाने पर इनपुट का आकार। यदि कोई इनपुट नहीं है, या यदि GET विधि का उपयोग किया जाता है, तो यह पैरामीटर अपरिभाषित है। QUERY_STRING में GET विधि का उपयोग करके पास होने पर दर्ज की जाने वाली जानकारी होती है। PATH_INFO उपयोगकर्ता को सीजीआई कमांड लाइन से पथ निर्दिष्ट करने की अनुमति देता है (उदाहरण के लिए, http: // होस्टनाम / सीजीआई-बिन / प्रोग्रामनाम / पथ)। PATH_TRANSLATED सिस्टम के वास्तविक पथ में PATH_INFO के सापेक्ष पथ का अनुवाद करता है।

एक CGI एप्लिकेशन लिखने के लिए जो पर्यावरण चर प्रदर्शित करता है, आपको यह जानना होगा कि दो चीजें कैसे करें:

  • सभी पर्यावरण चर और उनके संगत मूल्यों को परिभाषित करें।
  • ब्राउज़र के लिए परिणाम प्रदर्शित करें।

आप पहले से ही जानते हैं कि अंतिम ऑपरेशन कैसे करना है। पर्ल में, पर्यावरण चर को% ENV के एक सहयोगी सरणी में संग्रहीत किया जाता है, जिसे पर्यावरण चर के नाम से दर्ज किया जाता है। लिस्टिंग 2.3 में env.cgi शामिल है, जो एक पर्ल प्रोग्राम है जो हमारे उद्देश्य को पूरा करता है।

लिस्टिंग 2.3। एक पर्ल प्रोग्राम, env.cgi, जो सभी CGI पर्यावरण चरों को प्रिंट करता है।

#! / usr / स्थानीय / बिन / पर्ल प्रिंट "सामग्री-प्रकार: पाठ / html \ n \ n"; प्रिंट " \ n "; प्रिंट" सीजीआई पर्यावरण\ n "; प्रिंट"\ n "; प्रिंट" \ n "; प्रिंट"

सीजीआई पर्यावरण

\ n "; foreach $ env_var (कुंजी% ENV) (प्रिंट" $ env_var= $ ENV ($ env_var)
\ n ";) प्रिंट" \ एन ";

एक समान कार्यक्रम सी में लिखा जा सकता है; पूरा कोड लिस्टिंग 2.4 में है।

लिस्टिंग 2.4. Env.cgi.c से C. / * env.cgi.c * / #include बाहरी चार ** वातावरण; int main () (char ** p = environ; printf ("सामग्री-प्रकार: टेक्स्ट / html \ r \ n \ r \ n"); प्रिंटफ (" \ n "); प्रिंटफ (" सीजीआई पर्यावरण\ n "); प्रिंटफ ("\ n "); प्रिंटफ (" \ n "); प्रिंटफ ("

सीजीआई पर्यावरण

\ n "); जबकि (* p! = NULL) प्रिंटफ ("% s
\ n ", * पी ++); प्रिंटफ (" \ एन ");)

प्राप्त करें या पोस्ट करें?

GET और POST विधियों में क्या अंतर है? GET एन्कोडेड इनपुट स्ट्रिंग को QUERY_STRING पर्यावरण चर के माध्यम से पास करता है, जबकि POST इसे स्टड के माध्यम से पास करता है। POST पसंदीदा तरीका है, विशेष रूप से बड़ी मात्रा में डेटा वाले फ़ॉर्म के लिए, क्योंकि भेजी गई जानकारी की मात्रा पर कोई प्रतिबंध नहीं है, और GET विधि के साथ, पर्यावरण स्थान की मात्रा सीमित है। हालाँकि, GET की एक निश्चित उपयोगी संपत्ति है; इसे अध्याय 5, इनपुट में विस्तार से शामिल किया गया है।

यह निर्धारित करने के लिए कि किस विधि का उपयोग किया जाता है, CGI प्रोग्राम पर्यावरण चर REQUEST_METHOD की जांच करता है, जिसे GET या POST पर सेट किया जाएगा। यदि POST पर सेट किया जाता है, तो एन्कोडेड जानकारी की लंबाई CONTENT_LENGTH पर्यावरण चर में संग्रहीत होती है।

एन्कोडेड इनपुट

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

इसे निर्धारित करने के लिए, ब्राउज़र URL एन्कोडिंग विनिर्देश का उपयोग करता है, जिसे निम्नानुसार वर्णित किया जा सकता है:

  • एम्परसेंड (&) से विभिन्न क्षेत्रों को अलग करता है।
  • नाम और मूल्यों को समान चिह्नों (=) के साथ, बाईं ओर नाम और दाईं ओर मान के साथ अलग करता है।
  • रिक्त स्थान को धन चिह्नों (+) से बदलें।
  • सभी "असामान्य" वर्णों को प्रतिशत चिह्न (%) से बदल देता है और उसके बाद दो अंकों वाला हेक्साडेसिमल वर्ण कोड होता है।

आपकी अंतिम एन्कोडेड स्ट्रिंग निम्न की तरह दिखेगी:

नाम 1 = मान 1 और नाम 2 = मान 2 और नाम 3 = मान 3 ...

नोट: URL एन्कोडिंग के लिए विनिर्देश RFC1738 में हैं।

उदाहरण के लिए, मान लीजिए कि आपके पास एक फॉर्म था जिसमें नाम और उम्र मांगी गई थी। इस फॉर्म को रेंडर करने के लिए इस्तेमाल किया गया HTML कोड लिस्टिंग 2.5 में दिखाया गया है।

लिस्टिंग 2.5. नाम और आयु प्रपत्र प्रदर्शित करने के लिए HTML कोड।

नाम और उम्र

अपना नाम दर्ज करें:

अपनी आयु दर्ज करें:

मान लीजिए कि उपयोगकर्ता नाम फ़ील्ड में जो शमो और आयु क्षेत्र में 20 में प्रवेश करता है। इनपुट इनपुट स्ट्रिंग में एन्कोड किया जाएगा।

नाम = जो + शमो और उम्र = 20

पार्सिंग इनपुट

इस जानकारी के उपयोगी होने के लिए, आपको उस जानकारी का उपयोग किसी ऐसी चीज़ के लिए करना होगा जिसका उपयोग आपके CGI प्रोग्राम द्वारा किया जा सके। इनपुट को पार्स करने की रणनीतियाँ अध्याय 5 में शामिल हैं। व्यवहार में, आपको यह सोचने की ज़रूरत नहीं है कि इनपुट को कैसे पार्स किया जाए, क्योंकि कई विशेषज्ञ पहले से ही सार्वजनिक रूप से उपलब्ध पुस्तकालयों को लिख चुके हैं जो पार्सिंग करते हैं। इस अध्याय में दो ऐसे पुस्तकालय निम्नलिखित खंडों में प्रस्तुत किए गए हैं: cgi -lib.pl पर्ल के लिए (स्टीव ब्रेनर द्वारा लिखित) और सी के लिए cgihtml (मेरे द्वारा लिखित)।

विभिन्न भाषाओं में लिखे गए अधिकांश पुस्तकालयों का सामान्य लक्ष्य एन्कोडेड स्ट्रिंग को पार्स करना और नाम और मूल्य जोड़े को डेटा संरचना में रखना है। पर्ल जैसी अंतर्निहित डेटा संरचनाओं वाली भाषा का उपयोग करने का एक स्पष्ट लाभ है; हालांकि, सी और सी ++ जैसी निचले स्तर की भाषाओं के लिए अधिकांश पुस्तकालयों में डेटा संरचना और सबरूटीन निष्पादन शामिल है।

पुस्तकालयों की पूरी समझ हासिल करना आवश्यक नहीं है; सीजीआई प्रोग्रामर के काम को सरल बनाने के लिए उन्हें एक उपकरण के रूप में उपयोग करना सीखना बहुत अधिक महत्वपूर्ण है।

सीजीआई -lib.pl

Cgi -lib.pl पर्ल सहयोगी सरणियों का उपयोग करता है। & ReadParse फ़ंक्शन इनपुट स्ट्रिंग को पार्स करता है और नाम से प्रत्येक नाम / मान जोड़ी में प्रवेश करता है। उदाहरण के लिए, इनपुट स्ट्रिंग नाम / आयु को डीकोड करने के लिए आवश्यक संबंधित पर्ल स्ट्रिंग्स को अभी प्रस्तुत किया जाएगा

और रीडपार्स (* इनपुट);

अब, "नाम" के लिए दर्ज किया गया मान देखने के लिए, आप सहयोगी सरणी $ इनपुट ("नाम") का उल्लेख कर सकते हैं। इसी तरह, "आयु" मान तक पहुँचने के लिए, चर $ इनपुट ("आयु") को देखें।

सीजीआईएचटीएमएल

सी में कोई अंतर्निहित डेटा संरचना नहीं है, इसलिए सीजीआईएचटीएमएल अपने सीजीआई पार्सिंग रूटीन के उपयोग के लिए बाइंडिंग की अपनी सूची लागू करता है। यह एंट्रीटाइप संरचना को निम्नानुसार परिभाषित करता है:

टाइपिफ़ संरचना (चार * नाम; चार * मान;) एंट्रीटाइप;

cgihtml का उपयोग करके इनपुट स्ट्रिंग "नाम / आयु" को C में पार्स करने के लिए, निम्नलिखित का उपयोग करें:

/ * इनपुट नामक एक लिंक्ड सूची घोषित करें * / सूची इनपुट; / * पार्स इनपुट और लिंक की गई सूची में जगह * / read_cgi_input (और इनपुट);

आयु की जानकारी तक पहुँचने के लिए, आप या तो सूची को मैन्युअल रूप से पार्स कर सकते हैं या मौजूदा cgi _val () फ़ंक्शन का उपयोग कर सकते हैं।

#शामिल #शामिल चार * आयु = मॉलोक (आकार (चार) * स्ट्रेलन (सीजीआई _val (इनपुट, "आयु")) + 1); Strcpy (आयु, cgi _val (इनपुट, "आयु"));

"आयु" का मान अब आयु रेखा में संग्रहीत है।

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

सरल सीजीआई कार्यक्रम

आप nameage.cgi नामक एक CGI प्रोग्राम लिखने वाले हैं जो नाम / आयु प्रपत्र को संसाधित करता है। डेटा प्रोसेसिंग (जिसे मैं आमतौर पर "मध्यवर्ती सामग्री" कहता हूं) न्यूनतम है। Nameage.cgi केवल इनपुट को डीकोड करता है और उपयोगकर्ता नाम और आयु प्रदर्शित करता है। जबकि विशेष रूप से उपयोगी नहीं है, ऐसा उपकरण सीजीआई प्रोग्रामिंग के सबसे महत्वपूर्ण पहलू को प्रदर्शित करता है: इनपुट और आउटपुट।

आप नाम और आयु फ़ील्ड पर कॉल करके ऊपर बताए अनुसार उसी फॉर्म का उपयोग करते हैं। मजबूती और दक्षता के बारे में अभी चिंता न करें; मौजूदा समस्या को सरलतम तरीके से हल करें। पर्ल और सी समाधान क्रमशः लिस्टिंग 2.6 और 2.7 में दिखाए गए हैं।

लिस्टिंग 2.6। Perl . में Nameage.cgi

#! / usr / लोकल / बिन / पर्ल # nameage.cgi को "cgi-lib.pl" और ReadParse (* इनपुट) की आवश्यकता होती है; प्रिंट "सामग्री-प्रकार: टेक्स्ट / html \ r \ n \ r \ n"; प्रिंट " \ n "; प्रिंट" नाम और उम्र\ n "; प्रिंट"\ n "; प्रिंट" \ n "; प्रिंट" हैलो, "। $ इनपुट ("नाम")। आप \ n "हैं; प्रिंट $ इनपुट ("आयु")।

\ n "; प्रिंट" \ एन ";

लिस्टिंग 2.7. C . में nameage.cgi

/ *nameage.cgi.c* / #शामिल करें #include "cgi-lib.h" int main () (सूची इनपुट; read_cgi_input (& इनपुट); प्रिंटफ ("सामग्री-प्रकार: टेक्स्ट / html \ r \ n \ r \ n"); प्रिंटफ (" \ n "); प्रिंटफ (" नाम और उम्र\ n "); प्रिंटफ ("\ n "); प्रिंटफ (" \ n "); प्रिंटफ ("हैलो,% एस। आप \ n", cgi_val (इनपुट," नाम ") हैं); प्रिंटफ ("% s वर्ष पुराना है।

\ n ", cgi_val (इनपुट," आयु ")); प्रिंटफ (" \ एन ");)

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

फॉर्म भरकर और सबमिट बटन पर क्लिक करके प्रोग्राम को चलाने का प्रयास करें।

सामान्य प्रोग्रामिंग रणनीति

अब आप सीजीआई प्रोग्रामिंग के लिए आवश्यक सभी बुनियादी सिद्धांतों को जानते हैं। एक बार जब आप समझ जाते हैं कि सीजीआई कैसे जानकारी प्राप्त करता है और इसे ब्राउज़र को कैसे वापस भेजता है, तो आपके अंतिम उत्पाद की वास्तविक गुणवत्ता आपकी सामान्य प्रोग्रामिंग क्षमता पर निर्भर करती है। अर्थात्, जब आप सीजीआई (या उस मामले के लिए कुछ भी) प्रोग्राम करते हैं, तो निम्नलिखित गुणों को ध्यान में रखें:

  • सादगी
  • क्षमता
  • बहुमुखी प्रतिभा

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

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

सारांश

इस अध्याय में संक्षेप में सीजीआई प्रोग्रामिंग की मूल बातें शामिल की गई हैं। आप अपने डेटा को सही ढंग से स्वरूपित करके और stdout पर प्रिंट करके आउटपुट बनाते हैं। CGI इनपुट प्राप्त करना कुछ अधिक कठिन है क्योंकि इसका उपयोग करने से पहले इसे पार्स किया जाना चाहिए। सौभाग्य से, वहाँ पहले से ही कई पुस्तकालय हैं जो पार्सिंग करते हैं।

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

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

चूंकि हाइपरटेक्स्ट प्रकृति में स्थिर है, वेब पेज सीधे उपयोगकर्ता के साथ इंटरैक्ट नहीं कर सकता है। जावास्क्रिप्ट के आगमन से पहले, उपयोगकर्ता के कार्यों का जवाब देने के लिए उसके द्वारा दर्ज किए गए डेटा को आगे की प्रक्रिया के लिए वेब सर्वर पर भेजने के अलावा कोई अन्य तरीका नहीं था। सीजीआई के मामले में, यह प्रसंस्करण बाहरी कार्यक्रमों और लिपियों का उपयोग करके किया जाता है, जो एक मानकीकृत (आरएफसी 3875: सीजीआई संस्करण 1.1 देखें) इंटरफेस के माध्यम से एक्सेस किए जाते हैं - एक सामान्य गेटवे। सीजीआई कैसे काम करता है, यह दर्शाने वाला एक सरलीकृत मॉडल अंजीर में दिखाया गया है। 1.

सीजीआई कैसे काम करता है?

सीजीआई के माध्यम से काम करने के लिए सामान्यीकृत एल्गोरिदम को निम्नानुसार दर्शाया जा सकता है:

  1. क्लाइंट अपने यूआरआई द्वारा सीजीआई आवेदन का अनुरोध करता है।
  2. वेब सर्वर अनुरोध स्वीकार करता है और सेट करता है पर्यावरण चर, उनके माध्यम से डेटा और सेवा की जानकारी एप्लिकेशन को प्रेषित की जाती है।
  3. वेब सर्वर मानक इनपुट (stdin) के माध्यम से कॉल किए गए प्रोग्राम के इनपुट पर अनुरोधों को पुनर्निर्देशित करता है।
  4. CGI एप्लिकेशन सभी आवश्यक संचालन करता है और HTML के रूप में परिणाम उत्पन्न करता है।
  5. उत्पन्न हाइपरटेक्स्ट को वेब सर्वर पर stdout के माध्यम से वापस कर दिया जाता है। त्रुटि संदेश stderr के माध्यम से पारित किए जाते हैं।
  6. वेब सर्वर क्लाइंट को अनुरोध के परिणाम भेजता है।

सीजीआई अनुप्रयोग

सबसे आम कार्य जिसके लिए CGI का उपयोग किया जाता है, वह है इंटरैक्टिव पेज बनाना, जिसकी सामग्री उपयोगकर्ता के कार्यों पर निर्भर करती है। ऐसे वेब पेजों के विशिष्ट उदाहरण किसी साइट पर पंजीकरण फॉर्म या टिप्पणी सबमिट करने के लिए एक फॉर्म हैं। CGI एप्लिकेशन का एक अन्य क्षेत्र जो उपयोगकर्ता इंटरैक्शन के दृश्यों के पीछे रहता है, क्लाइंट के बारे में जानकारी के संग्रह और प्रसंस्करण से संबंधित है: "कुकीज़" -कुकीज़ को सेट करना और पढ़ना; ब्राउज़र और ऑपरेटिंग सिस्टम के बारे में डेटा प्राप्त करना; वेब पेज पर विज़िट की संख्या की गणना करना; वेब यातायात की निगरानी, ​​​​आदि।

ये क्षमताएं इस तथ्य से प्रदान की जाती हैं कि सीजीआई स्क्रिप्ट को डेटाबेस से जोड़ा जा सकता है या सर्वर की फाइल सिस्टम तक पहुंच प्राप्त की जा सकती है। इस प्रकार, एक सीजीआई स्क्रिप्ट डेटाबेस टेबल या फाइलों में जानकारी सहेज सकती है और अनुरोध पर इसे वहां से प्राप्त कर सकती है, जो एचटीएमएल का उपयोग नहीं किया जा सकता है।

कृपया ध्यान दें: CGI एक प्रोग्रामिंग भाषा नहीं है! यह एक साधारण प्रोटोकॉल है जो वेब सर्वर को स्टड के माध्यम से डेटा पास करने और इसे स्टडआउट से पढ़ने की अनुमति देता है। इसलिए, कोई भी सर्वर प्रोग्राम जो मानक I / O स्ट्रीम के साथ काम कर सकता है, उसे CGI हैंडलर के रूप में उपयोग किया जा सकता है।

हैलो वर्ल्ड!

पर्ल भाषा में एक साधारण सीजीआई स्क्रिप्ट का एक उदाहरण लिस्टिंग 1 में दिखाया गया है। यदि आप इस कोड को हैलो नामक फ़ाइल में सहेजते हैं (नाम कुछ भी हो सकता है, एक्सटेंशन भी हो सकता है), फ़ाइल को सर्वर के सीजीआई-बिन में रखें निर्देशिका (अधिक सटीक रूप से, वेब सर्वर की उस निर्देशिका में, जो CGI अनुप्रयोगों के लिए अभिप्रेत है और वेब सर्वर सेटिंग्स में निर्दिष्ट है) और इस फ़ाइल के लिए निष्पादन योग्य अनुमतियाँ सेट करें (chmod uo + x hello), तो यह एक पर उपलब्ध हो जाएगी पता जैसे http://servername/cgi-bin/hello.

लिस्टिंग 1. नमूना सीजीआई स्क्रिप्ट (पर्ल)

#! / usr / bin / perl प्रिंट "सामग्री-प्रकार: टेक्स्ट / html \ n \ n"; प्रिंट< सीजीआई नमस्ते कहो

हैलो वर्ल्ड!

एचटीएमएल निकास;

इस कोड में, लाइन #! / Usr / bin / perl पर्ल दुभाषिया के लिए पूर्ण पथ निर्दिष्ट करती है। लाइन सामग्री-प्रकार: टेक्स्ट / html \ n \ n एक http-हेडर है जो सामग्री के प्रकार (माइम-प्रकार) को निर्दिष्ट करता है। डबल लाइन ब्रेक कैरेक्टर (\ n \ n) - आवश्यक, यह हेडर को मैसेज बॉडी से अलग करता है।

पर्यावरण चर

सभी सीजीआई अनुप्रयोगों की वेब सर्वर द्वारा निर्धारित पर्यावरण चरों तक पहुंच होती है। CGI प्रोग्राम लिखते समय ये चर एक महत्वपूर्ण भूमिका निभाते हैं। तालिका सीजीआई के लिए उपलब्ध कुछ चरों को सूचीबद्ध करती है।

वातावरण विविधताविवरण
सामग्री प्रकार सर्वर को भेजे गए डेटा का प्रकार। इसका उपयोग तब किया जाता है जब कोई क्लाइंट डेटा भेज रहा हो, जैसे फ़ाइल डाउनलोड करना।
कंटेंट की लम्बाईअनुरोध की सामग्री का आकार। यह चर POST अनुरोधों के लिए परिभाषित किया गया है।
HTTP_कुकीकुकीज़ का एक सेट कुंजी-मूल्य जोड़े के रूप में देता है।
HTTP_USER_AGENTउपयोगकर्ता एजेंट (ब्राउज़र) जानकारी
PATH_INFOसीजीआई निर्देशिका पथ
क्वेरी स्ट्रिंगअनुरोध स्ट्रिंग (यूआरएल-एन्कोडेड) जीईटी विधि द्वारा पारित किया गया।
REMOTE_ADDRअनुरोध करने वाले ग्राहक का आईपी पता।
रिमोट होस्टक्लाइंट का पूर्णतः योग्य नाम (FQDN)। (अगर उपलब्ध हो)
REQUEST_METHODजिस तरीके से अनुरोध किया जाता है। अक्सर GET या POST।
SCRIPT_FILENAMEअनुरोधित स्क्रिप्ट का पूरा पथ (सर्वर फ़ाइल सिस्टम में)।
स्क्रिप्टस्क्रिप्ट का नाम
सर्वर का नामसर्वर का नाम
सर्वर_एडीडीआरसर्वर आईपी
सर्वर_सॉफ़्टवेयरसर्वर सॉफ्टवेयर जानकारी

लिस्टिंग 2 एक छोटे पर्ल प्रोग्राम के लिए कोड दिखाता है जो पर्यावरण चर को सूचीबद्ध करता है। इसके काम का परिणाम अंजीर में दिखाया गया है। 2.

लिस्टिंग 2. पर्यावरण चर

#! / usr / bin / perl प्रिंट "सामग्री-प्रकार: टेक्स्ट / html \ n \ n"; प्रिंट " \ एन \ एन

वातावरण

\ n "; foreach (सॉर्ट कीज़% ENV) (प्रिंट" $_: $ ईएनवी ($ _)
\ n ";) प्रिंट"\ एन"; बाहर जाएं;

डेटा पास करना: GET विधि

क्वेरी स्ट्रिंग के माध्यम से urlencoded डेटा पास करने के लिए GET विधि का उपयोग किया जाता है। अनुरोधित संसाधन (सीजीआई स्क्रिप्ट) का पता और उसमें स्थानांतरित डेटा को "?" द्वारा अलग किया जाता है। ऐसे पते का एक उदाहरण:

http://example.com/cgi-bin/script.cgi?key1=value1&key2=value2

ब्राउज़र के एड्रेस बार में दर्ज किए गए डेटा के लिए डिफ़ॉल्ट रूप से GET पद्धति का उपयोग किया जाता है। वेब प्रपत्र से डेटा भेजते समय समान स्ट्रिंग उत्पन्न की जा सकती है (टैग

) यदि फॉर्म के लिए कोई सबमिट विधि निर्दिष्ट नहीं है। जीईटी विधि द्वारा भेजी गई सभी जानकारी स्पष्ट पाठ में प्रेषित होती है, इसलिए आपको इसका उपयोग कभी भी सर्वर पर पासवर्ड या अन्य समान जानकारी भेजने के लिए नहीं करना चाहिए। GET विधि की आकार सीमा है: क्वेरी स्ट्रिंग 1024 वर्णों से अधिक नहीं होनी चाहिए।

GET विधि द्वारा भेजी गई जानकारी को QUERY_STRING शीर्षलेख में एक स्ट्रिंग के रूप में स्थानांतरित किया जाता है जिसमें प्रपत्र के जोड़े होते हैं कुंजी = मान, CGI स्क्रिप्ट इसे उसी नाम के पर्यावरण चर के माध्यम से प्राप्त कर सकती है।

लिस्टिंग 3. GET विधि का उपयोग करके वेब फॉर्म से डेटा भेजना

एक साधारण सीजीआई स्क्रिप्टिंग: जीईटी-विधि का उपयोग करके डेटा भेजना आप नाम: नाम = "उपयोगकर्ता">
आप कहां के रहने वाले हैं ?: नाम = "से">

लिस्टिंग 3 से फॉर्म में डेटा दर्ज करने और "सबमिट" बटन पर क्लिक करने के बाद, फॉर्म की एक क्वेरी स्ट्रिंग उत्पन्न होगी:

http://example.com/cgi-bin/ हैलो कहें?उपयोगकर्ता=कुछ पाठ&से=दूसरा पाठ

कहा पे: Sayhello सीजीआई लिपि का नाम है; उपयोगकर्ता और से पैरामीटर नाम हैं; कुछ टेक्स्ट और दूसरा टेक्स्ट संबंधित पैरामीटर के लिए उपयोगकर्ता द्वारा दर्ज किए गए मान हैं।

लिस्टिंग 4 एक नमूना स्क्रिप्ट दिखाती है जो लिस्टिंग 3 में फॉर्म डेटा को प्रोसेस कर सकती है।

लिस्टिंग 4. GET पद्धति का उपयोग करके वेब फॉर्म से डेटा भेजना

#! / usr / bin / perl लोकल ($ बफर, @ जोड़े, $ जोड़ी, $ नाम, $ मूल्य,% फॉर्म); # पर्यावरण का विश्लेषण $ ENV ("REQUEST_METHOD") = ~ tr / a-z / A-Z /; अगर ($ ईएनवी (" REQUEST_METHOD") ईक" पाना") ($ बफर = $ ENV (" क्वेरी स्ट्रिंग");) # क्वेरी स्ट्रिंग को कुंजी / मान जोड़े में विभाजित करें @ जोड़े = विभाजन (/ & /, $ बफर); foreach $ जोड़ी (@pairs) (($ नाम, $ मान) = विभाजन (/ = /, $ जोड़ी); $ मूल्य = ~ टीआर / + / /; $ मूल्य = ~ एस /% (..) / पैक ("सी", हेक्स ($ 1)) / जैसे; $ फॉर्म ($ नाम) = $ मूल्य; # डेटा को एक सरणी में सहेजें) # हेडर प्रिंट भेजें "सामग्री-प्रकार: टेक्स्ट / html \ n \ n"; # हाइपरटेक्स्ट प्रिंट भेजें< सीजीआई नमस्ते कहो

हैलो, $ FORM (उपयोगकर्ता) $ FORM (से) से!

एचटीएमएल निकास;

पासिंग डेटा: पोस्ट विधि

सामान्य तौर पर, सीजीआई स्क्रिप्ट को जानकारी पास करने के लिए POST विधि अधिक उपयुक्त होती है। प्रेषित डेटा का ब्लॉक जीईटी विधि के समान ही बनता है, लेकिन अनुरोध निकाय में प्रत्यक्ष हस्तांतरण किया जाता है। डेटा मानक इनपुट (stdin) के माध्यम से CGI एप्लिकेशन के इनपुट में प्रवेश करता है।

इस विधि द्वारा डेटा भेजने के लिए, इसे स्पष्ट रूप से प्रपत्र विवरण (क्रिया = "पोस्ट") में सेट किया जाना चाहिए।

इनपुट डेटा को संसाधित करने के लिए, CGI स्क्रिप्ट को stdin पढ़ना चाहिए, और इसे सही ढंग से करने के लिए, इसे CONTENT_LENGTH चर से संदेश का आकार जानने की आवश्यकता है। इसे स्पष्ट करने के लिए, हम सूची 4 में पर्यावरण विश्लेषण ब्लॉक को संशोधित करते हैं, इसे निम्नलिखित कोड से बदलते हैं:

... # पर्यावरण का विश्लेषण $ ENV ("REQUEST_METHOD") = ~ tr / a-z / A-Z /; अगर ($ ईएनवी (" REQUEST_METHOD") ईक" पद") (पढ़ना ( एसटीडीआईएन, $ बफर, $ ENV (" कंटेंट की लम्बाई"}); } ...

$ बफर चर में संग्रहीत मापदंडों और उनके मूल्यों की आगे की प्रक्रिया उसी तरह से की जाती है जैसे GET विधि का उपयोग करते समय।

सीजीआई . के लाभ

कई CGI सुविधाएँ अब DHTML, ActiveX, या Java एप्लेट जैसी तकनीकों द्वारा दोहराई गई हैं। सर्वर-साइड स्क्रिप्ट का उपयोग करने का मुख्य लाभ यह है कि आप यह सुनिश्चित कर सकते हैं कि सभी क्लाइंट (दुर्लभ अपवादों के साथ, आमतौर पर फ़ायरवॉल स्तर पर कुछ संसाधनों तक पहुंच को अवरुद्ध करने से जुड़े) सर्वर एप्लिकेशन के साथ काम करने में सक्षम होंगे। क्लाइंट प्रोग्राम को केवल ब्राउज़र में अक्षम किया जा सकता है, या बिल्कुल भी समर्थित नहीं है।

सीजीआई के नुकसान

इस तकनीक का सबसे बड़ा नुकसान वेब सर्वर प्रदर्शन के लिए बढ़ी हुई आवश्यकताएं हैं। मुद्दा यह है कि सीजीआई आवेदन के लिए प्रत्येक कॉल एक नई प्रक्रिया को जन्म देती है, इसके साथ आने वाले सभी ओवरहेड्स के साथ। यदि एप्लिकेशन त्रुटियों के साथ लिखा गया है, तो एक स्थिति संभव है जब यह, उदाहरण के लिए, एक अंतहीन लूप में फंस जाता है। टाइमआउट समाप्त होने पर ब्राउज़र कनेक्शन को समाप्त कर देगा, लेकिन सर्वर की तरफ, प्रक्रिया तब तक जारी रहेगी जब तक कि व्यवस्थापक इसे समाप्त करने के लिए मजबूर नहीं करता। इस संबंध में, क्लाइंट स्क्रिप्ट का एक महत्वपूर्ण लाभ है, क्योंकि उन्हें स्थानीय रूप से निष्पादित किया जाता है।

सीजीआई का एक और नुकसान यह है कि वेब सर्वर अन्य समाधानों की तुलना में कम सुरक्षित है। सीजीआई एप्लिकेशन से सर्वर संसाधनों तक पहुंच अधिकारों का गलत कॉन्फ़िगरेशन न केवल वेब सर्वर की संचालन क्षमता को खतरे में डाल सकता है, बल्कि सूचना सुरक्षा को भी खतरे में डाल सकता है। हालाँकि, किसी भी नेटवर्क तकनीक को परिभाषा के अनुसार संभावित रूप से असुरक्षित माना जा सकता है।

इस पेज का स्थायी पता है:

पेज 1 का 30

आज, गेस्टबुक, सर्वर सर्च और संदेश भेजने के लिए फॉर्म जैसी चीजें लगभग किसी भी गंभीर साइट की एक अनिवार्य विशेषता हैं। इन और अन्य घंटियों और सीटी को पेश करने की समस्या, निश्चित रूप से एक नौसिखिए वेबमास्टर की कल्पना को हर संभव तरीके से उत्तेजित करती है, उसे नींद, भूख और बीयर की लालसा से वंचित करती है। दुर्भाग्य से, प्रतिस्पर्धियों के पृष्ठों के HTML स्रोतों का अध्ययन करने से एक निश्चित "सीजीआई-बिन" के लिंक के अलावा कुछ नहीं मिलता है, और यहां तक ​​​​कि समाचार समूहों में भी आप कभी-कभी कुछ सीजीआई-स्क्रिप्ट का उल्लेख करते हैं। यह लेख आपकी साइट की महिमा और समृद्धि के लिए इन्हीं सीजीआई लिपियों का उपयोग करने की मूल बातें समर्पित है।

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

CGI . के बारे में एक संक्षिप्त गीतात्मक विषयांतर

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

GET /~paaa/cgi-bin/guestbbok.cgi HTTP / 1.0-यह अनुरोध में सबसे महत्वपूर्ण बात है

ठीक है, अगर उदाहरण के लिए एक साधारण फ़ाइल का अनुरोध किया जाता है .htmlतो अगर ऐसी कोई फाइल है, तो सर्वर ब्राउज़र को प्रतिक्रिया भेजेगा:

HTTP / 1.0 200 ठीक है
सामग्री-प्रकार: टेक्स्ट / html

आगे एक खाली लाइन के बाद (इसे अलग करने की जरूरत है शीर्षकसे तन) बहुत से जानकारी आती है यूआरएल"ए ...
वह मूल रूप से संपूर्ण है Www.... लिंक से लिंक पर जाएं ....
और क्या होगा अगर आपको इस नीरस प्रक्रिया में कुछ लाने की आवश्यकता है वास्तव मेंइंटरैक्टिव, गतिशील, सुंदर और भव्य ....? खैर, इस सवाल का जवाब है। बस क्या हुआ अगर अनुरोध किया यूआरएलएक विशेष कार्यक्रम निर्दिष्ट करें ( सीजीआई,कार्यक्रम सामान्य गेटवे इंटरफ़ेस - कॉमन गेटवे इंटरफ़ेस) और तथ्य यह है कि यह प्रोग्राम आपको कुछ देगा और इसे ब्राउज़र पर भेज देगा .... सर्वर शुरू होता है सीजीआईप्रोग्राम और यह, उदाहरण के लिए, प्रपत्र डेटा को संसाधित करने के बाद, आपको इसके डेटाबेस में कहीं दर्ज करता है, और यह आपको बताएगा कि आप महान हैं :)
खैर, मुझे आशा है कि मैंने आपको दिलचस्पी दिखाई ......?

लिखने के लिए आपको क्या जानना चाहिए, इसके बारे में संक्षिप्त जानकारी सीजीआईस्क्रिप्ट: ठीक है, सबसे पहले, आपको यह जानना होगा कि क्या है इंटरनेटऔर यह कैसे काम करता है (क्या आप जानते हैं? ;))) ) ठीक है, थोड़ा प्रोग्रामिंग कौशल (यह सबसे महत्वपूर्ण बात है)
चलो एक साथ कुछ सरल स्क्रिप्ट लिखते हैं और फिर मैं आपको बताऊंगा कि कुत्ते ने इधर-उधर कहाँ घूमा ...
सबसे पहले अपने होम डायरेक्टरी में एक डायरेक्टरी बनाएं सीजीआई-बिन:

सीडी public_html
एमकेडीआईआर सीजीआई-बिन
चामोद 0777 सीजीआई-बिन

अंतिम पंक्ति बहुत महत्वपूर्ण होगी।
एक संपादक लें और टाइप करें: #! / usr / बिन / पर्ल
# पहले.सीजीआई
प्रिंट "सामग्री-प्रकार: पाठ / html \ n \ n";
प्रिंट " ";
प्रिंट "

कैसे हो तुम !!!

";
प्रिंट "";

इसे निर्देशिका में सहेजें सीजीआई-बिननाम के तहत प्रथम.सीजीआईआपने इसे कैसे बचाया?
अब इसे निष्पादन योग्य बनाएं (यह एक प्रोग्राम है):

चामोद + एक्स फर्स्ट.सीजीआई

खैर, हम गंभीर क्षण में आते हैं .... ब्राउज़र लाइन में टाइप करें http://www.uic.nnov.ru/~your_login/cgi-bin/first.cgi
और देखो क्या होगा। दो चीजों में से एक होगा, या स्क्रिप्ट काम करेगी और आप इसके द्वारा उत्पन्न पेज देखेंगे (बधाई हो, यह हमारे रेजिमेंट में आ गया है!) या आंतरिक सर्वर त्रुटि-तो निराश न हों, आपने कुछ गलत किया है। तब पिस्सू पकड़ने वाला गाइड काम आएगा। ठीक है, सबसे पहले, सिंटैक्स जांच निम्नानुसार की जा सकती है:

पर्ल-सी फर्स्ट.सीजीआई

पर्ल आपको तुरंत या तो त्रुटि संदेश देगा (ठीक है, ऐसा होता है, अर्धविराम छूट गया था, कोष्ठक या उद्धरण बंद करना भूल गए थे ...) इसे ठीक उसी तरह से तय किया जा सकता है।
तार्किक रूप से ग्रॉसर खाली लाइन के आउटपुट को छोड़ना है जो हेडर को शरीर से अलग करता है:
प्रिंट "सामग्री-प्रकार: पाठ / html \ n \ n"; # बिलकुल ठीक
प्रिंट "सामग्री-प्रकार: पाठ / html \ n"; #त्रुटि!!!

आइए स्क्रिप्ट का विश्लेषण करें:
पहली पंक्ति #! / usr / बिन / पर्लबस इंगित करता है कि पर्ल सिस्टम पर कहां स्थित है। दूसरा सिर्फ एक टिप्पणी है - आप संकेत के बाद कुछ भी पोक कर सकते हैं #
फिर आता है प्रिंट "सामग्री-प्रकार: पाठ / html \ n \ n";यह एक हेडर है जो सामग्री के प्रकार को दर्शाता है। वह सब कुछ जो स्क्रिप्ट अपने मानक STDOUT आउटपुट पर प्रिंट करता है, सर्वर पर प्रसंस्करण के लिए जाता है। एक खाली रेखा शीर्षक को शरीर से अलग करती है, जो हमारे मामले में है

कैसे हो तुम !!!



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

खैर, मूल बातें पहले ही महारत हासिल कर ली गई हैं, सब कुछ उतना मुश्किल और निराशाजनक नहीं है जितना पहली बार लग सकता है
अब आप इस पर अपना हाथ पाने के लिए ऐसी सरल लिपियों को लिखने का अभ्यास कर सकते हैं।

ऑनलाइन स्टोर के मालिक "ई-कॉमर्स" की अवधारणा से पहले से परिचित हैं, वे निश्चित रूप से "ई-कॉमर्स - यह क्या है" प्रश्न का उत्तर जानते हैं। लेकिन अगर आप सार को देखें, तो कई बारीकियां सामने आती हैं और यह शब्द व्यापक अर्थ प्राप्त करता है।

ई-कॉमर्स: यह क्या है?

सामान्य अवधारणा इस प्रकार है: ई-कॉमर्स का अर्थ व्यवसाय करने के लिए एक निश्चित दृष्टिकोण है, जिसमें कई संचालन शामिल हैं जो इंटरनेट का उपयोग करने सहित माल या सेवाओं / कार्यों के प्रावधान में डिजिटल डेटा ट्रांसमिशन का उपयोग करते हैं।

इस प्रकार, यह कोई भी वाणिज्यिक लेनदेन है जो संचार के इलेक्ट्रॉनिक माध्यमों का उपयोग करके किया जाता है।

कार्य की योजना निम्नानुसार व्यवस्थित की गई है:

  • कोई भी ब्लॉगर या अपनी वेबसाइट का कोई अन्य स्वामी हो सकता है) इस प्रणाली में रजिस्टर करता है;
  • अपना लिंक प्राप्त करता है;
  • अपने वेब पेज पर एक विशेष कोड डालता है - ई-कॉमर्स पार्टनर्स नेटवर्क के चयनित आधिकारिक भागीदार का एक विज्ञापन प्रकट होता है;
  • साइट के रूपांतरण पर नज़र रखता है;
  • एक सहबद्ध लिंक पर क्लिक करने वाले विज़िटर द्वारा अपनी साइट पर की गई प्रत्येक खरीदारी के लिए एक निश्चित प्रतिशत अर्जित करता है।

WP ई-कॉमर्स

बड़ी संख्या में लोग अब ई-कॉमर्स के बारे में भावुक हैं, मुख्य रूप से अपनी वेबसाइट बनाने की इच्छा के कारण, अपने स्वयं के उत्पादों को बेचने के लिए एक अद्वितीय ऑनलाइन स्टोर। इस बढ़ती मांग को पूरा करने के लिए, डेवलपर्स ने एक ई-कॉमर्स टेम्पलेट बनाने पर ध्यान केंद्रित किया है। यह क्या है, हम आगे विचार करेंगे।

ऐसा ही एक टेम्प्लेट उदाहरण वर्डप्रेस ई-कॉमर्स है। यह वर्डप्रेस (सबसे प्रसिद्ध वेब संसाधन प्रबंधन प्रणालियों में से एक) के लिए एक शॉपिंग कार्ट प्लगइन है, जिसका उद्देश्य मुख्य रूप से ब्लॉग बनाना और व्यवस्थित करना है। यह पूरी तरह से निःशुल्क प्रदान किया जाता है और साइट विज़िटर को इंटरनेट पेज पर खरीदारी करने की अनुमति देता है।

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