Astăzi zavedom conversație pe un subiect aparent simplu ca site-ul de configurare. Asta este, să vorbim despre lucruri, cum ar fi setările de conexiune de baze de date, o varietate de setări, toate aceste lucruri, și cum se păstrează toate aceste lucrări.
Vom împărți această discuție în trei părți:
- În aspectul curent la diferitele opțiuni pentru organizarea de configurare. Această parte este axat în principal pe începători.
- În a doua meditați lucruri mai complexe. De exemplu, cum să susțină un set de diferite configurările pentru un singur sistem.
- Și a treia parte va încerca să-l totul sculpta in cod.
Deci, în cazul în care este posibil pentru a stoca setările de sistem?
Nicăieri pentru a stoca
Este posibil să nu tensiona cu setări separate, stocare, și să le utilizeze în mod direct în locul potrivit:
mysql_connect ( 'localhost', 'vasa', 'qwerty');
Și de aceea este de dorit să se facă fiecare fișier, care are nevoie de acces la baza de date. Apoi, încercarea de a schimba orice parametru necesar transforma într-o vacanță de neuitat.
După utilizarea acestei abordări de ceva timp pe site-urile volumului de mai mult de trei fișiere, dezvoltatorii de obicei dau seama că nu putem trăi.
variabilele globale
Primul lucru pe care îl face după realizarea că sistemul, ar trebui să declare o dată și într-un singur loc:
Asta e mai bine, dar există, de asemenea, contra. La fel ca și în general, în variabile globale. Murdărit contextul global al datelor eterogene, nestructurate. Cu domenii vor avea probleme constante. Și, din moment ce întregul sistem în această configurație, în mod evident, se va baza pe variabile globale, atunci există o chestiune de conflict de nume cu toate consecințele neplăcute.
define ( 'db_host', 'localhost'); define ( 'DB_USER', 'vasa'); //.
Acum ne-am murdărit contextul global de constante eterogene, nestructurate. Singura bucurie: acestea sunt disponibile în orice domeniu de aplicare și nu pot fi modificate în mod accidental.
Cu un ușor avantaj față de variabile globale, în unele cazuri chiar mai rău decât acestea sunt constante.
bază de date
Setările pot fi stocate în baza de date (bine, cu excepția, într-adevăr, setările pentru conectarea la baza de date), și, dacă este necesar, pentru a alege-le cereri.
La prima vedere acest lucru este foarte amuzant și are dreptul la existență a deciziei. Mai ales pentru că multe forumuri populare și blog-uri le folosesc.
Dar o privire mai atentă, acest lucru este cel mai prost lucru pe care îl puteți gândi despre acest subiect. Baza de date poate stoca setările pentru a fi schimbate prin intermediul interfeței web, precum și setările de utilizator, etc. Păstrați configurația generală este piz.ts.
Această decizie este de obicei presupune flexibil, deoarece vă permite să schimbați setările printr-un panou de administrare, fără a avea acces la codul (sau nu complica accesul la acestea). De fapt, ea dracului nu este necesar pentru setările generale. Nimeni din viața mea nu va trebui să schimbați calea către directorul cu temele pentru SMF Forum. Și, dacă este necesar: va trebui în continuare să meargă în codul și copiați dosarul într-o nouă locație.
Schimbarea este ceva care nu este prevăzută în astfel de zona de administrare, și chiar mai adăuga un nou parametru se traduce intr-o varietate de senzații neplăcute. Încercarea de a se copia pe site-ul lokalku pentru dezvoltare, la toate se transformă în ceva masochist. După copierea trebuie să urce la bază și să încerce să descopere în cazul în care toți parametrii care trebuie să se schimbe. Deosebit de mulțumit de faptul că acestea sunt stocate, de obicei, într-un format complet indigeste.
Avem acum totul într-o singură configurație matrice și nu poluează domeniul de aplicare la nivel mondial.
Puteți obține chiar scăpa de obiceiurile proaste și amintiți-vă că un tablou asociativ ne permite să structureze tot ce este omenește:
Acum, ochiul-plăcut și nu se poate lucra cu întreaga matrice, precum și cu părțile sale.
întoarce array ()
Nu toată lumea știe că se poate termina procesarea fișierului, precum și pentru funcția cu declarația de retur. Mai mult decât atât, pentru că este posibil să se întoarcă o valoare care ar avea ca rezultat să includă sau să solicite. ne-am cuplat acest fișier.
Crearea unui fișier de configurare (spune config.php.):
Acum nu avem nici variabile globale. Config nu mai determina modul în care aceasta este de a utiliza acest cod, și specifică numai de configurare. Și în codul în locul potrivit:
$ Config = includ ( '/ calea / spre / config.php'); // Citește configurația dintr-un fișier într-o variabilă
$ Config = Config :: get (); // în locul potrivit
Spre deosebire de exemplul anterior, am redus fișierul de conectare la o dată, chiar și cu mai multe cereri de configurare și de a scăpa de codul de aplicare de la cunoașterea calea către fișierul.
Dar mult mai important, ne-am împărtășit configurația de stocare și o interfață pentru a accesa. nu este format de configurare cod de citire nu împovăra cunoștințe despre sine în cazul în care acesta se află în ce mod și în ce moduri (pot fi complexe). Puteți schimba complet modul de stocare - a codului aplicației nu va fi afectată.
Din acel moment stocarea de configurare se poate face fără a se gândi la problemele de utilizare și vice-versa.
interfaţă îmbunătățită
Interfață la config (în exemplul anterior este Config :: get ()) pot fi îmbunătățite la nesfârșit și să-ți placă.
Scoateți statică, dar atârnat pe tema metodelor magice și SPL-interfață pentru a obține ceva de genul:
$ Db_host = $ configura cam> DB> gazdă; $ UTILIZATOR_BD = $ configura cam> DB> utilizator;
Obținerea config-obiect poate fi realizat printr-un container IOC, sau printr-un alt lucru greu de înțeles.
În ceea ce privește îmbunătățirea interfeței vă puteți gândi la o mulțime de lucruri, și chiar mai mult pot fi găsite pe Internet gata. Să lăsăm acest subiect, în viitor se va concentra exclusiv pe metoda de stocare de configurare.
Formate de stocare: Adaptoare
După cum arată practica, cel mai convenabil pentru utilizarea formatului de cod este o reprezentare a structurii arborelui de configurare. Asta este, tot același tablou asociativ.
Dar, pentru stocare poate fi formate convenabile diferite. Din nou, o matrice (ca mai sus), XML, .ini fișier sau altceva.
Deoarece stocarea reprezentărilor am separat, putem stoca ceea ce doriți, fără a afecta aceasta în interfața. Singurul lucru de care aveți nevoie este de a converti formatul selectat pentru stocarea o structură arborescentă pentru a accesa (care este, utilizați un alt adaptor pentru a porni).
Un exemplu de o astfel de abordare: Zend_Config.
P.S. Ce este stocat într-un fișier de configurare
La sfârșitul părții introductive pentru a reflecta asupra tuturor celor ce ar trebui să fie stocate în configurația site-ului și ceea ce nu ar trebui.
Aici o astfel de aici nu trebuie să faceți:
$ Dir_root = '/www/site.ru/htdocs'; $ Dir_image = '/www/site.ru/htdocs/image'; $ Dir_thumbs = '/www/site.ru/htdocs/image/thumbs'; $ Dir_css = '/www/site.ru/htdocs/css'; // și o duzină de moduri
Este nevoie să se schimbe ceva, pentru a trece la un alt server, copiat lokalku: despre acest lucru poate fi ucis.
Toate valorile care pot fi generate pe baza unei baze, este mai bine pentru a genera:
$ Dir_root = '/www/site.ru/htdocs'; $ Dir_image = $ dir_root '/ imagine' .; // sau șablon de tip „> / imagine“, care se calculează în locul potrivit. $ Dir_thumbs = $ dir_image '/ degetele' .; $ Dir_css = $ dir_root '/ css' .;
Valoarea de bază în exemplu, în majoritatea cazurilor, se pot obține în mod automat de către $ _SERVER [ „DOCUMENT_ROOT“] sau dirname (__ FILE__).
Nu încercați să configurați fiecare detaliu: muncă în plus, tu și cei care vor veni după tine, pentru a primi flexibilitatea garantată și în plus este utilă nu întotdeauna.
Pentru început, destul de probabil. Partea următoare va vorbi despre lucruri mai interesante.
În piton totul mai distractiv, de exemplu, au settings.py:
'Numele' database_name =
DATABASE_USERNAME = 'username'
DATABASE_USERNAME = 'parola'
yuzaem și, dacă este necesar:
setările de import
sau
din setările de import nume_bază_date, DATABASE_USERNAME
etc.
Am o modalitate de a stoca fișiere de configurare mult mai mult ca :)
Nu văd mare diferență, să fiu sincer.
În următorul articol voi scrie lucrurile un pic mai complicate, spune cum acest lucru în Python de a face.
Vreau să spun, că nu are nevoie de nici o zendkonfigov și alte Footy ... Și nu este (super) variabile globale, etc.
Vă mulțumesc, mulțumit. Pentru cea mai mare parte, și eu fac, eu sunt, probabil, pe drumul cel bun :).
phpdude, care a apăsat? Nechezatul?
artoodetoo, eu în tine, și fără îndoială :)
întrebam cum de a stoca setările pentru întregul site și revraytit pentru unele subdomenii, cum ar fi ...?
La naiba, Vasya_ts parola «qwerty» - este doar tryndets, site-urile vor rupe pe unu la doi-trei. A schimbat pentru a urmări ceva!
> Vă întrebați cum se păstrează setările pentru întregul site și revraytit pentru unele subdomenii, cum ar fi ...?
Nu am înțeles
> Nu am înțeles
Ei bine, juzverej vine la un subdomeniu, și sunt funcționale pe un alt ... baza de date se blochează
kostyl, în următorul articol scurt Chet.
vasa_c,
Nu vă recomandăm să utilizați matrice de retur format (...);
și apoi scrie „Toate valorile care pot fi generate pe baza unei baze, pentru a genera o mai bună:“
Prompt cum să combine cele de mai sus scrise?
Pe următorul fișier Exemplu de configurare:
$ CONFIG = array (
'A' => «1»,
'B' => «2»,
'Ab' => $ CONFIG [ 'a']. $ CONFIG [ 'b'],
);
2. În cazul traseelor, de obicei, devine construit în jurul __DIR__.
vasa_c, multumesc pentru idee! Pentru sarcina mea curentă va folosi poluhakom.
De asemenea, folosesc adesea poluhakami, beneficiul pentru a reveni la locul de muncă se poate face ...
Bine іdeya, vіdmovivsya od defini!