PHP में "शामिल" और "आवश्यकता" के बीच अंतर


174

क्या उनके बीच कोई अंतर है? क्या उनका उपयोग करना प्राथमिकता का विषय है? क्या एक दूसरे का उपयोग करने से कोई फायदा होता है? सुरक्षा के लिए कौन सा बेहतर है?



3
हमेशा "आवश्यकता" का उपयोग करें। "शामिल" एक सौना में बिजली के दरवाजे के रूप में सुविधाजनक है।
मार्को मरियानी

2
@MarcoMariani यह कैसे असुविधाजनक होगा? यह शायद स्पष्ट है, मैं इसे नहीं देख रहा हूं। शायद भाप?
ऑस्टिन बर्क

इसे सीधे शब्दों में कहें, अगर गलती से कोई 'foo.php' फाइल गायब है, तो मैं जल्द से जल्द जानना चाहता हूं, तब नहीं जब foo.php में एक फंक्शन होना चाहिए था। आवश्यकता के साथ शामिल किए जाने से अक्सर कीड़े प्रकट हो सकते हैं। मान लीजिए कि config.php गायब है, और एप्लिकेशन डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ चल रहा है। सुरक्षा के लिए कौन सा बेहतर है? सौना के लिए, जब मैं अंदर होता हूं और दरवाजा किसी कारण से नहीं खुलता, तो मुझे अच्छा नहीं लगता।
मार्को मरियानी

जवाबों:


148

आपको पेज केrequire विस्तृत PHP मैनुअल में बताए गए अंतर मिलेंगे :

requireके समान है includeविफलता यह भी एक घातक उत्पादन करेगा पर सिवाय E_COMPILE_ERRORस्तर त्रुटि। दूसरे शब्दों में, यह स्क्रिप्ट को रोक देगा जबकि केवल एक चेतावनी ( E_WARNING) का उत्सर्जन करता है जो स्क्रिप्ट को जारी रखने की अनुमति देता है।

उदाहरण के लिए @ efritz का उत्तर देखें


6
tiposaurus.co.uk/2011/04/04/… "आवश्यकता () और शामिल के बीच महत्वपूर्ण अंतर यह है कि अगर आपको आवश्यकता है () एक फ़ाइल जिसे लोड नहीं किया जा सकता है (जैसे अगर वह वहां नहीं है) तो यह एक घातक त्रुटि उत्पन्न करता है जो पृष्ठ के निष्पादन को पूरी तरह से रोक देगा, और अधिक आउटपुट उत्पन्न नहीं होगा। दूसरी ओर, यदि आप एक फ़ाइल को लोड नहीं किया जा सकता है, तो इसमें शामिल हैं (), तो यह केवल एक चेतावनी उत्पन्न करेगा और पेज बनाना जारी रखें। "
तूफानी

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

3
<?php if (isset($flibbertygibbet)) require 'file.php';लगता है कि यह उत्तर पूरी तरह से गलत होगा। अन्यथा, मुझे एक गंभीर त्रुटि मिलनी चाहिए, भले ही यह शर्त सही न हो। stracePHP को छूने की कोशिश भी नहीं करता है file.php
cHao

इसके विपरीत (), आवश्यकता () को हमेशा लक्ष्य फ़ाइल में पढ़ा जाएगा, भले ही वह रेखा जिस पर कभी क्रियान्वित न हो। यदि आप किसी फ़ाइल को सशर्त रूप से शामिल करना चाहते हैं, तो शामिल करें () का उपयोग करें। और हालाँकि, यदि वह लाइन जिस पर आवश्यकता () होती है, निष्पादित नहीं की जाती है और न ही लक्ष्य फ़ाइल में किसी भी कोड को निष्पादित किया जाएगा। विपरीत बात कह रहा है, या मैं गलत समझ रहा हूँ?
लोरलेस

1
इन सभी टिप्पणियों को संपादित किए जाने से पहले इस उत्तर के मूल संस्करण की चर्चा कर रहे हैं। मूल रूप से एक अमान्य दावा था, यह दावा करते हुए कि if (false) require 'file.php';'file.php' को लोड किया जाएगा (लेकिन निष्पादित नहीं किया गया)। TLDR इन सभी टिप्पणियों की अवहेलना करता है।
केविन व्हीलर

181

requireयदि फ़ाइल लोड नहीं की जा सकती है, तो PHP घातक त्रुटि को फेंक देगा। (निष्पादन बंद हो जाता है)

includeयदि फ़ाइल लोड नहीं की जा सकती तो चेतावनी का उत्पादन करता है। (निष्पादन जारी है)

यहाँ शामिल है और अंतर की आवश्यकता का एक अच्छा चित्रण है :

यहां छवि विवरण दर्ज करें

प्रेषक: अंतर के लिए php शामिल है (रॉबर्ट के द्वारा; नवंबर 2012)


2
लिंक टूट गया है
माइकल पीटर

5

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

requireयदि आप निर्दिष्ट फ़ाइल लोड नहीं कर सकते हैं, और एक घातक त्रुटि को फेंक सकते हैं, तो इसका उपयोग करके आपकी स्क्रिप्ट रुक जाएगी।


2

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

  // Example 1.
  // users see a standard php error message or a blank screen
  // depending on your display_errors setting
  require 'not_there'; 


  // Example 2.
  // users see a meaningful error message
  try {
      include 'not_there';
  } catch(Exception $e) {
     echo "something strange happened!";
  }

NB: उदाहरण 2 के लिए आपको एक त्रुटि-से-अपवाद हैंडलर स्थापित करने की आवश्यकता है, जैसा कि यहाँ वर्णित है http://www.php.net/manual/en/class.errorexception.php

  function exception_error_handler($errno, $errstr, $errfile, $errline ) {
     throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
  }
  set_error_handler("exception_error_handler");   

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

0
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>

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

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

यदि आप उपयोग करते हैं , तो दूसरी प्रतिध्वनि की आवश्यकता होती है , लेकिन यदि आप उपयोग नहीं करते हैं, तो कोई फर्क नहीं पड़ता कि क्या त्रुटि आती है, आपको दूसरी प्रतिध्वनि का परिणाम भी दिखाई देगा।


-2

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


क्या आपको वास्तव में एक 2 1/2 वर्ष पुराने प्रश्न को दोहराना था जो कि उत्तर के 2/3 पहले ही कह चुके हैं ...?
19

4
ओ, वह एक नौसिखिया है! शायद एसओ की अवधारणा को अभी तक समझ नहीं आया है।
डैन हैनली

घटिया उपयोगकर्ता 2069222, अब उसने SO: 'छोड़ दिया (
5
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.