2010-02-08 6 views
15

वर्तमान में चल रहे स्क्रिप्ट की एक ही निर्देशिका में फ़ाइलों को शामिल करते समय केवल 'myParent.php' के बजाय WordPress उपयोग dirname(__FILE__).'/myParent.php' सहित प्रसिद्ध PHP स्क्रिप्ट्स के बहुत सारे प्रसिद्ध PHP स्क्रिप्ट्स।केवल आवश्यकता ('myParent.php') की आवश्यकता के मुकाबले क्या आवश्यक है (dirname (__ FILE __)। '/'। 'MyParent.php')?

क्या वे वही बात नहीं हैं? आप और टाइपिंग क्यों पसंद करते हैं?

धन्यवाद।

+4

ध्यान दें कि आपको हमेशा '__DIR__' को' dirname (__ FILE __) 'के प्रतिस्थापन के रूप में प्राथमिकता देना चाहिए। – Niko

+2

\ _ \ _ डीआईआर \ __ PHP 5.3 – Lamy

उत्तर

16

PHP को फ़ाइल के पूर्ण पथ को जानने की आवश्यकता है। dirname(__FILE__).'/myParent.php' पहले से ही पूर्ण पथ है लेकिन 'myParent.php' को पूर्ण पथ प्राप्त करने और फ़ाइल ढूंढने के लिए include_path में दिए गए पथों का उपयोग करके एक लुकअप की आवश्यकता है। एक बेहतर विकल्प './myParent.php' होगा:

हालांकि, यह और अधिक कुशल है स्पष्ट रूप से पीएचपी हमेशा वर्तमान निर्देशिका की जाँच हर शामिल के लिए की तुलना में include './file' उपयोग करने के लिए। क्योंकि PHP फ़ाइल के लिए खोज के माध्यम से include_path पुनरावृति नहीं होंगे

+1

के रूप में समर्थित है एक पूर्ण पथ की आवश्यकता नहीं है, और पथ शामिल करने की आवश्यकता नहीं है। "यदि पथ परिभाषित किया गया है (पूर्ण या रिश्तेदार), include_path को पूरी तरह अनदेखा कर दिया जाएगा।" http://us2.php.net/manual/en/function.include.php –

+2

@ जस्टिन जॉनसन: * पथ * के साथ मैनुअल का अर्थ है कि स्ट्रिंग में कम से कम एक '/' है। तो '/ foo', 'foo/bar','/foo/bar' पथ हैं लेकिन' foo' नहीं है। और यह 'myParent.php' के लिए भी लागू होता है। – Gumbo

+0

क्या इस के लिए कोई विकल्प है 'dirname की आवश्यकता है (dirname (dirname (__ FILE __))। "/ Out/DBconnection.php"; '? मुझे कुछ चाहिए '।/'या' ../../ '। है? – stack

11

dirname + फ़ाइल नाम का उपयोग करना, थोड़ा तेज है। यदि गति मायने रखती है, तो आप अधिक टाइप करेंगे।

14

प्रदर्शन वृद्धि के अलावा (जो अधिकतर मामलों में पूर्व-अनुकूलन की संभावना है *), यह भी (बहुत विषम) परिदृश्य से बचाता है जहां पर्यावरण के PHP कॉन्फ़िगरेशन में वर्तमान निर्देशिका (.) नहीं है पथ शामिल करें

* include का बेंचमार्क जिस पथ को include_path लुकअप के विरुद्ध एक सापेक्ष पथ की आवश्यकता है, का उपयोग करके। 100000 पुनरावृत्तियों से अधिक परीक्षण किया गया प्रत्येक

परिणाम

include("include.php"): 8.3664200305939s 
include("./include.php"): 8.3511519432068s 

(8.3664200305939 - 8.3511519432068)/100000 = 0.000000152680874s 

आप सैकड़ों या फ़ाइलों के हजारों शामिल कर रहे हैं जब तक, 0.0000001s पर सबसे अच्छा नगण्य है।

टेस्ट कोड

define("MAX", 100000); 

ob_start(); 
$i = MAX; 
$_t = microtime(true); 
do { 
    include("include.php"); 
} while (--$i); 
$_t = microtime(true) - $_t; 
ob_end_clean(); 

echo "include(\"include.php\"): {$_t}s\n"; 

ob_start(); 
$i = MAX; 
$_t = microtime(true); 
do { 
    include("./include.php"); 
} while (--$i); 
$_t = microtime(true) - $_t; 
ob_end_clean(); 

टेस्ट पीएचपी संस्करण 5.2.9 के साथ एक 2.16GHz मैकबुक 10.5.8 पर आयोजित किया गया

7

एक नोट जोड़ के बारे में शामिल हैं ('(7 रिलीज www.entropy.ch) ./file.php ')।

यदि केवल गति मायने रखती है, तो हाँ आप ('./ file.php') का उपयोग कर सकते हैं, लेकिन यदि आप निर्भरताओं और सापेक्ष पथ मुद्दों को हल करना चाहते हैं, तो आप dirname (__ FILE __) का उपयोग कर बेहतर हैं, क्योंकि

include('./file.php') 

अभी भी निष्पादित स्क्रिप्ट के सापेक्ष पथ ( स्क्रिप्ट सहित) का निर्माण करेगी, जबकि

include(dirname(__FILE__).'/file.php'); 

वर्तमान स्क्रिप्ट जहां इस लाइन रहता है करने के लिए संबंधित पथ का समाधान हो जाएगा ( स्क्रिप्ट शामिल)।

आम तौर पर, आप dirname (__ FILE __) का उपयोग करके बेहतर होते हैं, क्योंकि './' केवल एक नगण्य प्रदर्शन वृद्धि देता है जबकि dirname (__ FILE __) आपको बहुत अधिक विश्वसनीय प्रदान करता है।

/संपादित करें: यह भी ध्यान रखें कि बेंचमार्क ऊपर किया ही include('./something.php'), जो वास्तव में है include('something.php') की तुलना में तेजी है क्योंकि आप include_path चलने की जरूरत नहीं है, लेकिन जब आप का उपयोग dirname(__FILE__) आप dirname() समारोह कॉल उपरि मिल चिंताओं, जो इसे बनाता है include_path चलने से धीमा (जब तक कि आपके include_path में बहुत सारे पथ न हों)।

+3

या '__DIR__' (जो' dirname() 'कॉल को बचाता है) – Steve

+3

हां लेकिन' __DIR__' केवल PHP 5.3.0 के बाद उपलब्ध है जब '__FILE__' और' dirname() 'दोनों PHP 4.0.2 के बाद उपलब्ध हैं। '__DIR__' अधिक कॉल-कुशल है, लेकिन कम पुन: संगत: / – gaborous

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