2009-09-07 6 views
24

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

पहली बार, मैं वास्तव में एक स्वच्छ और संगठित निर्देशिका संरचना की योजना बनाने के लिए समय ले रहा हूं।

आप आमतौर पर कौन सी निर्देशिका संरचनाओं का उपयोग करते हैं, और हजारों फाइलें होने पर मैन्युवर के लिए सबसे आसान कौन सा होगा?

+0

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

+2

मैंने वास्तव में इसके बारे में सोचा है ... और मैं अंत में अंततः एक का उपयोग कर सकता हूं ... लेकिन मुझे आगे बढ़ने से पहले इसे खुद करने में सक्षम होना चाहिए :) यह एक न्यूरोटिक चीज है – johnnietheblack

उत्तर

21

यह मेरा सेटअप है। यह मेरे लिए बहुत अच्छा काम करता है - बहुत बड़ी परियोजनाओं (एक सोशल नेटवर्क सहित)।
ये फ़ोल्डर सभी अपने मुख्य आवेदन फ़ोल्डर के भीतर रहते हैं: - कस्टम पीएचपी config फ़ाइलें हैं

  • सीएसएस -

    • config शामिल परियोजना की सीएसएस फ़ाइलें
    • सहायकों - शामिल 'सहायक' फ़ाइलें (प्रत्येक फ़ाइल फ़ंक्शंस का संग्रह है)
    • छवियां - इसमें परियोजना की छवियांशामिल हैं
    • js - शामिल परियोजना की जावास्क्रिप्ट फ़ाइलें
    • lib - पीएचपी कक्षाएं परियोजना के लिए विशिष्ट होता है
    • मॉड्यूल - एक - मेरी MVC ढांचे मॉड्यूल के रूप पैकेजिंग साइट अनुभाग
      • ब्लॉग की अनुमति देता है उदाहरण मॉड्यूल
        • नियंत्रक - मॉड्यूल के लिए नियंत्रक
        • ,210
        • मॉडल - मॉड्यूल
        • विचारों के लिए मॉडल शामिल हैं - बार देखा गया है कि विश्व स्तर पर सुलभ होना चाहिए (पेज शीर्ष, पादुका, आदि) शामिल हैं - मॉड्यूल
    • विचारों के लिए विचारों को समाहित

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

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

    मुझे उम्मीद है कि इससे मदद मिलती है।

  • +2

    इसका मतलब है कि सभी PHP कोड, कॉन्फ़िगरेशन इत्यादि सभी के लिए दृश्यमान होंगे जबतक कि आप कुछ सर्वर जादू नहीं करते हैं जैसे .htaccess – OIS

    +1

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

    +1

    'lib - प्रोजेक्ट के लिए विशिष्ट PHP वर्ग शामिल हैं 'क्या आपका मतलब" विशिष्ट नहीं है "? मुझे लगता है कि lib उन चीजों के लिए है जो आप लिखते हैं जो सामान्य हैं और/या वास्तविक मौजूदा पुस्तकालयों के लिए जिनका आप उपयोग करते हैं। इसके अलावा, मैं उत्सुक हूं - 'जेएस' और' सीएसएस 'फ़ोल्डरों के बारे में आप क्या सोचते हैं जहां तक ​​मॉड्यूल जाते हैं? क्या आप 'जेएस' निर्देशिका को lib और मॉड्यूल में इसी तरह विभाजित करेंगे? –

    5

    कोर फ़ाइलों के लिए जो शामिल हैं: approot/इंक/

    के लिए डेटा का उपयोग कार्य करता है और कक्षाओं में हैं: approot/दाव/

    javascripts के लिए: approot/scripts/

    सीएसएस के लिए: दृष्टिकोण/शैलियों/

    छवियों के लिए: दृष्टिकोण/आईएमजी/

    स्थैतिक सामग्री (उपयोगकर्ता प्रोफ़ाइल चित्र या अपलोड किए गए चित्रों सामान्य रूप से) के लिए: approot/स्थिर/

    कैश के लिए: टेम्पलेट्स के लिए approot/कैश/

    या देखें फाइलें: approot/टेम्पलेट्स/

    सभी पृष्ठों दायर: approot/

    Samstyle PHP Framework

    01 से संरचना

    मैंने जो उत्तर यहां पोस्ट किया था वह 200 9 से था। वर्षों से अधिक मानकों को प्रकाशित किया गया, जिसमें PSR-0 शामिल है जो फ़ोल्डर संरचना पर विषय को शामिल करता है। मेरे पास एक नया (और मुझे लगता है कि यह बेहतर है) Packfire Framework के साथ फ़ोल्डर संरचना।

    +0

    यह क्यों नीचे मतदान करें? – johnnietheblack

    +1

    कोई विचार नहीं। मतदाता से भी पता लगाना अच्छा लगेगा। – mauris

    +0

    @mauris क्या आप अभी भी इस संरचना का उपयोग करते हैं? –

    4

    मेरे अनुभव में, आप इसके लिए कभी योजना नहीं बना सकते। आप कौन से ढांचे का पालन करने का प्रयास कर सकते हैं, लेकिन मुझे लगता है कि मैं अपने मोल्ड में बिल्कुल फिट नहीं हूं।

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

    +0

    ढांचे से सीखने पर अच्छा विचार ... लेकिन कुछ अच्छे क्या हैं, और मुझे उनकी संरचना कहां मिलती है? धन्यवाद! – johnnietheblack

    2

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

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

    ये PHP/HTML फ़ाइल के लिए थे।

    अब के बारे में अन्य फ़ाइलों:

    • CodeIgniter \ छवियों: छवियों
    • CodeIgniter \ लिपियों के लिए: जावा स्क्रिप्ट के लिए और उनके ढांचे
    • CodeIgniter \ शैलियों: सीएसएस
    • के लिए कोडइग्निटर \ अपलोड: अपलोड की गई फ़ाइलों के लिए, यदि आप डीबी

    में फ़ाइलों को डालना नहीं चाहते हैं तो विवरण देखें कोड विस्तार से इग्निटर ढांचे।

    यहाँ "CodeIgniter \" approot

    +0

    क्या मैं वेब रूट फ़ोल्डर में index.php डाल सकता हूं और बाकी PHP को नियंत्रक में डाल सकता हूं? अग्रिम धन्यवाद। –

    18

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

    project/ 
    web/ 
        index.php 
        css/ 
        js/ 
        images/ 
    config/ 
    lib/ 
    
    • वेब/जड़ विज़िटर के लिए दृश्यमान
    • lib/यहाँ है पुस्तकालय फ़ोल्डर, और जहाँ फ़ाइलों के लिए autoload नज़र है।

    आप प्रोजेक्टर/नियंत्रक, मॉड्यूल, व्यू, हेल्पर इत्यादि जैसे अधिक सबफ़ोल्डर जोड़ सकते हैं। यह आपके ढांचे पर निर्भर करता है।

    संपादित करें:

    आप संगीतकार (जो मेरा सुझाव है) और शायद घुरघुराना और कम अपनी फ़ाइल संरचना के साथ NPM का उपयोग करते हैं होगा निम्नलिखित:

    project/ 
        web/ 
         js/ 
         css/ 
         images/ 
         index.php 
        cli/ 
        config/ 
         config.php 
        node_modules/ 
        src/ 
        test/ 
        vendor/ 
        composer.json 
        composer.lock 
        packages.json 
    
    • वेब/सब है आपके सार्वजनिक फाइलें
    • क्ली/स्क्रिप्ट और प्रोग्राम्स कमांड लाइन से चलाने के लिए वेब नहीं
    • कॉन्फ़िगर/आपके सभी सह nfig फ़ाइलें (गिट में आप config.php को अनदेखा करते हैं और इसके बजाय usernames, पासवर्ड, सत्यापन कोड और तालिका उपसर्ग/प्रत्यय और अन्य "रहस्य" के बिना config.dist.php हैं)
    • node_modules/आपकी सभी लाइब्रेरी फ़ाइलों को एनपीएम से (में git मैं तुम्हें
    • src psr4 संरचना में सभी अपने स्थानीय पीएचपी फ़ाइलें, composer.json में autoload करने के लिए स्थापित किया गया है एक submodule में रखते) का सुझाव
    • परीक्षण/अपने src कक्षाएं, में स्थापित करने के लिए अपने सभी इकाई परीक्षण है composer.json में autload-देव (, शायद -ओ जोड़ने यदि आप बहुत अधिक वर्गों की जरूरत नहीं है संगीतकार लाइव पर --no-देव इंस्टॉल का उपयोग करने का ध्यान रखें)
    • विक्रेता के पास आपकी सभी लाइब्रेरी फाइलें संगीतकार से हैं और एक और केवल autoload.php वेब/इंडेक्स में शामिल की जानी चाहिए।PHP और किसी भी क्ली स्क्रिप्ट्स (गिट में मेरा सुझाव है कि आप इस विक्रेता फ़ोल्डर को अनदेखा करें)

    अपनी परियोजना के लिए आवश्यक अन्य फ़ोल्डर्स और फ़ाइलों को जोड़ें।

    तैनाती उपयोग के लिए इस संरचना:

    /sites/project/ (project is your projectname) 
        current (alias to current release folder releases/v1.1.0) 
        previous (optional alias to previous release folder releases/v1.0.1) 
        releases/ 
         v1.0.0/ (git checkout of tag v1.0.0) 
         v1.0.1/ (git checkout of tag v1.0.1) 
         v1.1.0/ (git checkout of tag v1.1.0) 
        shared/ (has all your shared files and folders to be aliased in all releases - maybe something like GlusterFS) 
    

    एक तैनाती स्क्रिप्ट बनाओ। इस तरह कुछ:

    पहले डीबी का बैकअप लें या इसे एक नए डेटाबेस में कॉपी करें, रिलीज टैग के साथ नए फ़ोल्डर में चेकआउट गिट रेपो, सभी गिट सबमिड्यूल प्राप्त करें, संगीतकार इंस्टॉल करें --no-dev, किसी भी उपनाम सेट करें साझा फ़ोल्डर्स और अपलोड की गई छवियों और कॉन्फ़िगरेशन फ़ाइलों जैसी फ़ाइलें, जेएस/सीएसएस को गड़बड़ी और कम या समकक्ष के साथ जेनरेट करें, टैग के साथ नए फ़ोल्डर को वर्तमान उपनाम इंगित करें, अद्यतन डेटाबेस स्क्रिप्ट चलाएं, nginx/apache/fpm-php सेवाओं को पुनरारंभ करें, परीक्षण चलाएं वेबसाइट की जांच करने के लिए है।

    पिछले संस्करण पर वापस जाने के लिए एक स्क्रिप्ट है (या एक गाइड ताकि आप जानते हैं कि क्या करना है)।

    +0

    स्वच्छ और सरल लेकिन इसमें दो महत्वपूर्ण फ़ोल्डरों की कमी है: 'प्रोजेक्ट/टेस्ट /' और 'प्रोजेक्ट/क्लास /' (ताकि 'lib' फ़ोल्डर का उपयोग तीसरे पक्ष के पुस्तकालयों के लिए किया जा सके)। हो सकता है कि आप लोगों के पास थर्ड पार्टियों की संरचना के लिए अन्य सुझाव हों? – Wernight

    0

    symfony 1.4 या symfony 2 डीआईआर संरचना पर एक नज़र डालें। चुनें कि आपके लिए सबसे सहज क्या है।

    0

    मुझे विश्वास है कि यह इस बात पर निर्भर करता है कि परियोजना कितनी बड़ी होगी।

    परियोजना/
        index.php
        img/
        सीएसएस/
        js/
        विचारों/
        कार्य /: यह क्या मैं ज्यादातर प्रयोग किया जाता है

    जब तक सभी वें ई परियोजना फाइलों का आयोजन किया जाता है ...

    0

    यह ज्यादातर वरीयता का मामला है, एक त्वरित Google खोज कई अलग-अलग परियोजना संरचनाओं को प्रकट करेगी। लेकिन मानक पर सहमत होने पर यह वास्तव में अच्छा होगा। मुझे लगता है कि PHP पैकेज विकास मानकों द्वारा यह initiative एक अच्छा उम्मीदवार है।

    • bin/: कमांड लाइन निष्पादनयोग्य
    • config/: विन्यास फाइल
    • डॉक्स/: प्रलेखन फ़ाइलों
    • इस निर्देशिका संरचना वे प्रस्ताव है सार्वजनिक/: वेब सर्वर फ़ाइलें

    • संसाधनों/: अन्य संसाधन फ़ाइलों
    • src/: PHP स्रोत कोड
    • परीक्षण/: परीक्षण कोड
    0

    यह

    संरचना मैं वर्तमान में उपयोग कर रहा हूँ है
    public/   
        assets/   /* js, css, imgs, ... */ 
        index.php 
    src/ 
        config/   /* for config files */ 
        helpers/  /* for functions */ 
        libraries/  /* for free classes that are not MVC classes */ 
        models/   /* for M in MVC */ 
        views/   /* for V in MVC */     
        controllers/ /* for C in MVC */ 
        vendor/   /* for vendors files */ 
        uploads/  /* for uploaded images, docs, ... */ 
    
    संबंधित मुद्दे