क्लाइंट-साइड और सर्वर-साइड प्रोग्रामिंग के बीच अंतर क्या है?


498

मेरे पास यह कोड है:

<script type="text/javascript">
    var foo = 'bar';
    <?php
        file_put_contents('foo.txt', ' + foo + ');
    ?>

    var baz = <?php echo 42; ?>;
    alert(baz);
</script>

यह मेरे पाठ फ़ाइल में "बार" क्यों नहीं लिखता है, लेकिन "42" अलर्ट करता है?


NB: पहले इस सवाल के संशोधन स्पष्ट रूप से सर्वर पर PHP और क्लाइंट पर जावास्क्रिप्ट के बारे में थे। समस्या और समाधान की आवश्यक प्रकृति किसी भी जोड़ी की भाषाओं के लिए समान है जब एक क्लाइंट पर चल रही हो और दूसरी सर्वर पर (भले ही वे एक ही भाषा हो)। कृपया इसे ध्यान में रखें जब आप विशिष्ट भाषाओं के बारे में बात करते हुए उत्तर देखते हैं।

जवाबों:


460

आपका कोड दो पूरी तरह से अलग भागों में विभाजित है, सर्वर साइड और क्लाइंट साइड

                    |
               ---------->
              HTTP request
                    |
+--------------+    |    +--------------+
|              |    |    |              |
|    browser   |    |    |  web  server |
| (JavaScript) |    |    |  (PHP etc.)  |
|              |    |    |              |
+--------------+    |    +--------------+
                    |
  client side       |      server side
                    |
               <----------
          HTML, CSS, JavaScript
                    |

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

उदाहरण कोड इस तरह निष्पादित होता है:

<script type="text/javascript">
    var foo = 'bar';
    <?php
        file_put_contents('foo.txt', ' + foo + ');
    ?>

    var baz = <?php echo 42; ?>;
    alert(baz);
</script>

चरण 1, PHP <?php ?>टैग के बीच सभी कोड निष्पादित करता है । परिणाम यह है:

<script type="text/javascript">
    var foo = 'bar';

    var baz = 42;
    alert(baz);
</script>

file_put_contentsकॉल कुछ भी में परिणाम नहीं था, यह सिर्फ एक फ़ाइल के भीतर "+ foo +" लिखा था। <?php echo 42; ?>कॉल उत्पादन "42" है, जो स्थान जहां कि कोड हुआ करता था में है में हुई।

यह परिणामी HTML / JavaScript कोड अब क्लाइंट को भेजा जाता है, जहाँ उसका मूल्यांकन किया जाता है। alertकॉल काम करता है, जबकि fooचर कहीं भी नहीं किया जाता है।

सभी PHP कोड को सर्वर पर निष्पादित किया जाता है, इससे पहले कि क्लाइंट किसी भी जावास्क्रिप्ट को निष्पादित करना शुरू कर दे। जावास्क्रिप्ट के साथ बातचीत कर सकते हैं कि प्रतिक्रिया में कोई PHP कोड नहीं बचा है।

कुछ PHP कोड को कॉल करने के लिए, क्लाइंट को सर्वर पर एक नया HTTP अनुरोध भेजना होगा। यह तीन संभावित तरीकों में से एक का उपयोग करके हो सकता है:

  1. एक लिंक, जो ब्राउज़र को एक नया पृष्ठ लोड करने का कारण बनता है।
  2. एक फॉर्म सबमिशन, जो सर्वर को डेटा सबमिट करता है और एक नया पेज लोड करता है।
  3. एक AJAX अनुरोध है, जो एक जावास्क्रिप्ट तकनीक है (1. और 2. होगा) की तरह है, लेकिन मौजूदा पृष्ठ को छोड़े बिना सर्वर के लिए एक नियमित रूप से HTTP अनुरोध बनाने के लिए।

यहां इन पद्धति को अधिक विस्तार से रेखांकित किया गया है

आप ब्राउज़र का उपयोग window.locationकर एक नया पेज खोलने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं या एक फॉर्म सबमिट कर सकते हैं, संभावनाओं 1 और 2 का अनुकरण कर सकते हैं।


1
आप window.openएक iframe का उपयोग करके पृष्ठ का उपयोग करके या लोड करके दूसरा पृष्ठ भी खोल सकते हैं ।
ज्यूबिक

यह संचार विधियों की सूची में WebSockets जोड़ने के लायक हो सकता है।
क्वेंटिन

क्या होगा अगर मान लें कि ड्रॉप डाउन मान jquery के माध्यम से अपडेट हो जाते हैं। जब उपयोगकर्ता चरण 2 करता है। एक फॉर्म सबमिशन, जो सर्वर को डेटा सबमिट करता है और एक नया पृष्ठ लोड करता है, "सबमिट" बटन के माध्यम से jquery अपडेट किए गए मान php में एक नियंत्रक को पारित करने में सक्षम होंगे? या वे php के लिए दिखाई नहीं देंगे क्योंकि यह jquery के माध्यम से डोम में जोड़ा गया था? @ डिसेज़
फैब्रिकियो

@Fabricio एक HTTP अनुरोध <form>डेटा से बनाया जाएगा और सर्वर को भेजा जाएगा। आप जावास्क्रिप्ट का उपयोग करके प्रपत्रों में हेरफेर कर सकते हैं ताकि उनमें अलग-अलग डेटा हो। हां, यह डेटा परिणामी HTTP अनुरोध का हिस्सा होगा यदि यह फॉर्म का ठीक से हिस्सा है जब इसे सबमिट किया जा रहा है; इससे कोई फर्क नहीं पड़ता कि यह मूल HTML में था या जावास्क्रिप्ट के माध्यम से जोड़ा गया था।
deceze

163

यह निर्धारित करने के लिए कि PHP कोड जावास्क्रिप्ट कोड में काम क्यों नहीं करता है, हमें यह समझने की जरूरत है कि क्लाइंट साइड और सर्वर साइड भाषाएं क्या हैं, और वे कैसे काम करती हैं।

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

Wikipedia_http: //en.wikipedia.org/wiki/File से छवि: Scheme_dynamic_page_en.svg छवि attr

तो आप आसानी से देख सकते हैं कि सर्वर साइड भाषाएँ HTTP अनुरोधों को संभालती हैं और उन्हें संसाधित करती हैं, और जैसा कि @deceze ने कहा, PHP सर्वर पर निष्पादित होता है और कुछ HTML, और शायद जावास्क्रिप्ट कोड को आउटपुट करता है, जिसे क्लाइंट की प्रतिक्रिया के रूप में भेजा जाता है, जहां HTML की व्याख्या की जाती है और जावास्क्रिप्ट को क्रियान्वित किया जाता है।

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

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

इसलिए जब आप सर्वर पर HTTP अनुरोध करते हैं, तो सर्वर पहले PHP फ़ाइल को ध्यान से पढ़ता है यह देखने के लिए कि क्या कोई कार्य है जिसे निष्पादित करने की आवश्यकता है, और क्लाइंट पक्ष को एक प्रतिक्रिया भेजता है। फिर से, जैसा कि @deceze ने कहा, * एक बार PHP ने प्रतिक्रिया देना शुरू कर दिया, तो स्क्रिप्ट समाप्त हो जाती है और सर्वर पर तब तक कुछ नहीं होगा जब तक कि एक नया HTTP अनुरोध नहीं आता। *

सचित्र प्रदर्शन

छवि स्रोत

अगर मुझे PHP कॉल करने की आवश्यकता है तो अब मैं क्या कर सकता हूं? यह निर्भर करता है कि आपको इसे करने की आवश्यकता है: या तो पृष्ठ को फिर से लोड करके या AJAX कॉल का उपयोग करके।

  1. आप पृष्ठ को पुनः लोड करके और HTTP अनुरोध भेजकर ऐसा कर सकते हैं
  2. आप जावास्क्रिप्ट के साथ एक AJAX कॉल कर सकते हैं - इसके लिए पुनः लोडिंग पृष्ठ की आवश्यकता नहीं है

अच्छा पढ़ा:

  1. सर्वर-साइड स्क्रिप्टिंग
  2. विकिपीडिया: क्लाइंट-साइड स्क्रिप्टिंग
  3. मदारा उचिहा: ग्राहक पक्ष और सर्वर साइड प्रोग्रामिंग के बीच अंतर

30

आपकी जावास्क्रिप्ट क्लाइंट पर निष्पादित होगी, सर्वर पर नहीं। इसका अर्थ है कि fooसर्वर साइड पर मूल्यांकन नहीं किया गया है और इसलिए इसका मान सर्वर पर किसी फ़ाइल में नहीं लिखा जा सकता है।

इस प्रक्रिया के बारे में सोचने का सबसे अच्छा तरीका है जैसे कि आप गतिशील रूप से एक टेक्स्ट फ़ाइल बना रहे हैं। ब्राउज़र द्वारा व्याख्या करने के बाद आप जो पाठ उत्पन्न कर रहे हैं वह केवल निष्पादन योग्य कोड बन जाता है। केवल आप <?phpटैग के बीच जो जगह रखते हैं उसका मूल्यांकन सर्वर पर किया जाता है।

वैसे, HTML या जावास्क्रिप्ट में PHP तर्क के यादृच्छिक टुकड़ों को एम्बेड करने की आदत के कारण गंभीर रूप से जटिल कोड हो सकता है। मैं दर्दनाक अनुभव से बोलता हूं।


3
यहाँ आपका उत्तर उल्लेखनीय है, क्योंकि यह एक इंटरप्रेटर का उल्लेख करता है। हालाँकि, जावास्क्रिप्ट को संकलित किया जा सकता है और एक सर्वर वातावरण में चलाया जा सकता है, और इसे एक सर्वर द्वारा भी इंटरपेट किया जा सकता है।
ब्रेट कैसवेल

3

वेब एप्लिकेशन में प्रत्येक कार्य अनुरोध और प्रतिक्रिया के तरीके से निष्पादित होता है।

क्लाइंट साइड प्रोग्रामिंग जावा स्क्रिप्ट और इसकी रूपरेखा के साथ HTML कोड के साथ है, लाइब्रेरी इंटरनेट एक्सप्लोरर, मोज़िला, क्रोम ब्राउज़र में निष्पादित होती है। जावा परिदृश्य में सर्वर साइड प्रोग्रामिंग सर्वलेट्स टॉमकैट, वेब-लॉजिक, जे बॉस, वेबस्फेयर सेवर्स में निष्पादित होता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.