2009-11-11 17 views
16

मैं हमेशा अधिक कुशल तरीकों और नई चीजों को सीखने में रूचि रखता हूं। अभी, मैं प्रत्येक फ़ाइल में कोड <?php include('config.php'); ?> का उपयोग कर रहा हूं। फाइल फ़ोल्डर संरचना में कहां है, इस पर निर्भर करता है कि मेरे पास <?php include('../config.php'); ?> या <?php include('../../config.php'); ?> होगा। मैं इसे और अधिक कुशल कैसे बना सकता हूं? क्या रूट में मेरी config.php है और रूट में सबकुछ बनाने के लिए config.php की आवश्यकता है?config.php कुशलतापूर्वक कैसे शामिल करें?

+0

यदि आपका चल रहा अपाचे, http://stackoverflow.com/questions/24622/setting-php-include-path-on-a-per-site-basis एक विकल्प हो सकता है? – zak

उत्तर

17

वहाँ एक रास्ता एक फ़ाइल स्वचालित रूप से शामिल करने के लिए (है ऐसा कर सकते हैं auto_prepend_file आईएनआई सेटिंग), हालांकि आप जो सबसे बड़ा सुधार कर सकते हैं वह कई PHP फ़ाइलों के उपयोग को छोड़ना है और पूरी वेबसाइट के लिए एक प्रविष्टि बिंदु के रूप में index.php का उपयोग करना है।

मान लीजिए कि आप एक एसओ क्लोन लिखते हैं;) पृष्ठों "प्रश्न", "टैग", "उपयोगकर्ता" आदि के साथ। प्रत्येक पृष्ठ पर आपको कुछ सामान्य PHP सामग्री (डीबी, सत्र) + सामान्य HTML तत्व (हेडर, पाद लेख)। एक लोकप्रिय दृष्टिकोण है कि php फ़ाइलों का एक समूह (question.php, tag.php, users.php) उनमें से प्रत्येक में सामान्य सामान शामिल है। उदाहरण के लिए, users.php इस तो

include 'db.php'; 
include 'session.php'; 
include 'html.header.php'; 
.....users-specific stuff 
include 'html.footer.php'; 

यह काफी थकाऊ (आप कोड के बहुत सारे दोहराना) और अनम्य है की तरह दिखाई देगा (साइट पर सभी पृष्ठों पर एक साइडबार जोड़ने लगता है)। मेरे सुझाव "अंदर बाहर" है कि, एक "आम सामान" फ़ाइल है कि पृष्ठ-विशिष्ट कोड भी शामिल है शामिल हैं बनाने के लिए है:

# index.php 
db functions 
session functions 
html header 

$page = isset($_GET['page']) 
    ? preg_replace("/\W+/", "", $_GET['page']) 
    : "home"; 
include "$page.php"; 

html footer 

इस प्रकार आप वेबसाइट पर एक भी प्रवेश बिंदु होगा - यह अधिक है लचीला और डीबगिंग के लिए बेहतर है। केवल दोष यह है कि यूआरएल कम "अच्छा" (? user.php बनाम index.php पृष्ठ = उपयोगकर्ता) कर रहे हैं है, लेकिन यह आसानी से mod_rewrite के साथ हल किया जा सकता

+2

विस्तृत करने की देखभाल नहीं करते हैं, तब तक मैं रीयलपाथ (जो बहुत धीमी है) के स्थान पर अधिक कुशल 'dirname' का उपयोग करेगा)? एक सुधार किस तरह से है? प्रदर्शन, रखरखाव, आदि? – nickf

+0

जब तक कुछ प्रकार की templating चल रहा है (जो वहाँ होना होगा) मुझे लगता है कि समस्या का एक reframing के रूप में बहुत अच्छी तरह से काम करता है। – Kzqai

+0

मुझे यह जवाब सबसे अच्छा लगता है। इस प्रक्रिया को तेज़ करने के कई तरीके हैं जैसे कि आपके लिए इसे स्वचालित करने के लिए ढांचे का उपयोग करना। यदि आप चाहें तो मैं कुछ की सिफारिश कर सकता हूं। – Tres

17

पथ अपने php include path में config.php युक्त रखो और फिर आप बस कर सकते हैं:

include 'config.php'; 

या बेहतर अभी तक:

require_once 'config.php'; 

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

और कृपया ध्यान रखें कि आप अपने include कॉल में 'config.php' आसपास कोष्ठक जरूरत नहीं है। include PHP में कोई फ़ंक्शन नहीं है। यह एक भाषा निर्माण है। ब्रांड्स केवल एक अनावश्यक समूह के रूप में कार्य करता है जो इस उदाहरण के विपरीत नहीं है: $myVar = (2 + 2);

+1

ब्रांड्स पर नोट के लिए विशेष धन्यवाद। – Strawberry

+2

सामान्य रूप से पैस प्रदाताओं की बढ़ती लोकप्रियता और विकास पर्यावरण को विघटित करने के साथ, इसकी अनुशंसा नहीं की जाती है। मान लें कि आप एक वेब ऐप बना रहे हैं और आप अपना कोड साझा करना और प्रोजेक्ट को ट्रांसफर करना चाहते हैं। क्या आप वास्तव में प्रत्येक डेवलपर की आवश्यकता करना चाहते हैं जो परियोजना पर अपने हाथों को अपने ऐप को काम करने के लिए अपने आंतरिक php.ini को कॉन्फ़िगर करना होगा? – Seph

8

आप एक आधार dir निरंतर

define('BASE_DIR', realpath(__FILE__)); 
कर सकते हैं

रखो अपने index.php में

तो फिर तुम

include BASE_DIR . 'config.php'; 
+0

यह कई अलग-अलग उपयोगों के लिए भी आसान है - आपके आवेदन के लिए एक बार परिभाषित कुछ पथ स्थिरांक रखना हमेशा अच्छा होता है। – nickf

+0

मेरे पास आमतौर पर BASE_DIR और DOC_ROOT है .. PHP का उपयोग करने वाली निर्देशिकाओं के लिए BASE_DIR, और HTML सापेक्ष पथ आदि के लिए उपसर्ग के रूप में DOC_ROOT – alex

+0

@Alex - क्या आपको उपयोग करने में सक्षम होने के लिए पृष्ठ एक पर सत्र चर के रूप में BASE_DIR सेट करना होगा गहरे पृष्ठों पर या PHP इसे स्मृति में रखता है? – JM4

2

विभिन्न विकल्प है कि जोड़ा जा सकता है:

  • संसाधन फ़ाइल में पथ परिभाषाएं बनाएं जिन्हें आपके स्रोत नियंत्रण में ट्रैक नहीं किया जाएगा। जैसेपरिभाषित करें ('LIB_PATH', '/ home/tchalvak/project /');

  • एक autoprepend फ़ाइल निर्दिष्ट करें और इसे php.ini में सेट करें। जैसे स्क्रिप्ट की एक वैश्विक, प्रयुक्त-हर जगह सूची सहित, जिसे आप फ्लाई पर जोड़ या घटा सकते हैं।

  • अंत में, कि मैंने पाया या के साथ आया था पथ-स्ट्रिंग-हेरफेर प्रवंचना का एक छोटा सा है, मैं भूल जाते हैं जो:

    require_once(substr(__FILE__, 0, (strpos(__FILE__, 'lib/')))."resources.php"); // एक और नाम से जाना जाता फाइल करने के लिए एक विशिष्ट संबंध में एक फ़ाइल की आवश्यकता होती है, भले ही शामिल वास्तविक पथ का, और किसी भी परिभाषा से निपटने के बिना। मेरी आवश्यक फ़ाइलें में

    जब मैं, मैं स्थिरांक या चर का उपयोग नहीं कर सकते हैं (निरपेक्ष पथ को परिभाषित करने के लिए):

+0

प्लस सीधे फ़ाइल में डालने में एएसएफ़ के ऊपर पथ शामिल है। आश्चर्य की बात है, मैंने वास्तव में ऐसा कभी नहीं किया है। मुझे आश्चर्य है कि परियोजनाओं या कुछ साझा करते समय कोई नुकसान होता है? निश्चित नहीं। – Kzqai

2

यहाँ कैसे मैं अपने आवश्यक (शामिल) फ़ाइलों के प्रबंधन के बारे जाना है। मुझे लगता है कि इसमें कुछ फायदे हैं:

  1. मुझे तैनात वेबसाइट के प्रत्येक संस्करण के लिए निरंतर परिवर्तन करने की आवश्यकता नहीं है।
  2. PHPLint जैसे स्टेटिक विश्लेषण टूल इन प्रकार के समावेशन के साथ काम नहीं करते हैं।
  3. मेरा संपादक (ग्रहण) मुझे आवश्यक फ़ाइल नाम पर क्लिक करके नियंत्रण फ़ाइल पर नेविगेट करने की अनुमति देता है।
  4. यह (आवश्यक रास्तों को संपादित करने की आवश्यकता नहीं होती)
  5. ...

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

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