van egy config.php script, amit egy site osszes scriptje meghiv (a 3. sorban, ha ez szamit :-)). Ebben van 50 defined konstans, pl. define('A', 123);
Namost egy olyan igeny jott, hogy szeretnek, ha a lokalis, site-specifikus valtozok egy kulon file-ban legyenek megadva, pl. igy:
require_once 'site-config.php';
define('A', ...);
...
1 aprocska gubanc van: a konstansokat nem lehet feluldefinialni, kulonben egy notice uzenet a jutalom erte. Ezert 2 workaround jutott eszembe:
A) legyen a config.php-ban minden konstans elott egy csekkolas, hogy letezik-e mar ilyen konstans (a site-config.php-bol). Ha nincs, akkor adunk neki erteket:
if(!defined('A')) define('A', ...);
if(!defined('B')) define('B', ...);
...
B) a masik megoldasnal nem foglalkozom ezzel a csekkolassal, hanem egyszeruen kikapcsolom a notice hibauzeneteket:
require_once 'site-config.php';
ini_set("error_reporting", E_ALL & ~E_NOTICE);
A kerdes az, hogy melyik megoldas ad nagyobb teljesitmenyt? Vagy megforditva: melyik megoldas terheli jobban a php-t? Gondoljunk egy nagy forgalmu site-ra, ahol minden usec szamithat a feldolgozas soran.
- 7341 megtekintés
Hozzászólások
Szerintem teszteld ki, én azt tenném.
http://httpd.apache.org/docs/2.2/programs/ab.html
- A hozzászóláshoz be kell jelentkezni
Amikor utoljára foglalkoztam ezzel, akkor még sokan szidtál a php konstansokat, mert hogy nagyon lassú. Lehet érdemes lenne változókra cserélni.
Egyébként a
if (!(defined('abc'))) define('abc', 123);
talán nem olyan lassú.
- A hozzászóláshoz be kell jelentkezni
Amikor én legutóbb teszteltem, lényegesen gyorsabban lehetett egy $config[] tömböt kezelni, mint konstansokat. Annak egyetlen előnye pont az, amit most ki akarsz kerülni, hogy konstansok :)
- A hozzászóláshoz be kell jelentkezni
Egyébként +1.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Komolyan az 50 konstans letrehozasa a legnagyobb baj? :)
1) Miert konstans?
2) inkabb ne noticeoljon, az meg mehet fajlba is, ami nincs tul jo hatassal a teljesitmenyre.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Most tekintsünk el attól a zagyvaságtól hogy site-specifikus valtozok-ként hivatkozól a konstansokra! De sajnos még így is zagyvaság az egész, hisz pont arról van szó, hogy kulon file-ban legyenek megadva az értékek - ergo nem kell attól tartani, hogy bármi felül lesz definiálva, hisz nincs mit felüldefiniálni, ha már egyszer külön lesz megadva site-onként...
Ezek után gondoljunk egy nagy forgalmú site-ra! Bravó!
Nem a PHP teljesítményével miatt kéne aggódni, hanem értelmesen kell fogalmazni! Ugyanis ennek premisszája a probléma átgondolása, amit még a "nagy forgalmú site" varázsige kimondásával sem lehet elkerülni.
Tehát a kérdés az, hogy miért lenne "A" site-specifikus konstans, ha az a config.php -ban és nem csak a site-config.php -ban van definiálva?
- A hozzászóláshoz be kell jelentkezni
zagyvasag a te fejedben van, baratom. De hogy egy kicsit okosabb legy, mint amikor idejottel: adott egy szoftver konfigja, amit telepiteskor testre szabsz, beleirod a domained nevet, IP-cimet, stb. Majd amikor kijon a szoftver ujabb verzioja, ami adott esetben uj konfig valtozokat is hoz az uj feature-okhoz kapcsolodoan, akkor maceras a felhasznaloknak a felulirni a config.php-t, majd megint atirni azt a 10-15 az adott site-re jellemzo valtozot. Ez a problema, amire egy relative hatekony megoldast keresek.
De lehet, hogy az lesz belole, hogy majd egy upgrade.php beleirja az ujdonsagokat, oszt kalap, kaftan.
- A hozzászóláshoz be kell jelentkezni
Aham. Látatlanban: erre inkább egy minden szempontból átgondolt megoldást keressél! A hatékonyság a kevésbé fontos szempontok egyike.
Ha a feladat az, hogy hogy lehet megvalósítani a konfigurációs értékek automatikus updatet-jét, akkor csak egy zagyva fejű barát gondolhatja komolyan, hogy a lényegi kérdés az, hogy most az 'IF' vagy az error reporiting baszkurálás eredményez gyorsabb futást.
- A hozzászóláshoz be kell jelentkezni
Úgy tudom, hogy a php hibakezelése, akkor is lefut ha "lenémítod", ami erőforrás igényes lehet. Az "if" -es vizsgálat szerintem gyorsabb.
- A hozzászóláshoz be kell jelentkezni
igen, valami ilyesmire gondoltam
- A hozzászóláshoz be kell jelentkezni
Az otlet zavar, hogy kapcsoljuk ki a figyelmeztetest, es akkor nincs hiba. Ez nem errol szol. Ha holnaptol a PHP fejlesztok ugy dontenek, hogy tobbe nem leszek feluldefinialva a konstansok, akkor mi van? Leven hogy a notice pont ezt mondja, hogy nem lehet oket feluldefinialni. Az, hogy most sikerul, az egy dolog, de erre nem jo szamitani. Elvben ennek undefined behavior-nak kellene lennie.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
a konstansok mar ma sincsenek feluldefinialva, mert nem lehet, azert konstans. Szerintem teljesen jo, hogy nem lehet, es notice az eredmeny. Hanem amit kerestem, az a workaround (ami alatt nem feltetlen az elsikalast ertem) a problemara.
- A hozzászóláshoz be kell jelentkezni
Ez esetben nincs ertelme a workaroundnak. Ha az appod barmikor konstanst akar felulirni, akar csak az eselye felmerul, akkor vagy nem arra hasznalod a konstansokat, amire valok, vagy rossz az alkalmazas tervezese. Ezt a problemat megoldani kell, nem koruldolgozni.
Egyebkent en nem tartom jo otletnek az alkalmazas konfigjat konstansokba menteni. Tudom, hogy a PHP-s vilag nagyobbik fele igy tesz, ettol ez meg nem lesz jo otlet. Olyan szepen meg lehet ezt oldani egy darab singleton class-sal, vagy egy fuggvenybe csomagolt hash-sel (ha nagyon nem akarsz OOP-t), hogy a konstansokba mentes azok mellett csunyanak es ertelmetlennek tunik.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Ha van egy értékem, ami a program futása alatt nem változhat meg, akkor a konstans a leginkább megfelelő nyelvi elem a reprezentálására - minden további hókuszpók csak ezen egyszerű megoldás [szükségtelen] elbonyolítása. A kérdező valódi problémája nem az, hogy a program futása során nem lehet megváltoztatni a konstans értékét, hanem az, hogy a program futásán kivül sem tudja ezt megtenni.
- A hozzászóláshoz be kell jelentkezni
#define program_futasa. A program attol kezdve fut, hogy a php meghivja, es addig fut, amig a megfelelo php processz kilep. Ez a program futasa. A program futasan kivul pedig egy editor okszeru hasznalataval barmikor megvaltoztathato a kert ertek.
A kerdesbol szamomra egyertelmuen derul ki, hogy konfiguracios beallitast szeretne eszkozolni. Tehat nem ilyen APP_PATH, DIRECTORY_SEPARATOR, es hasonlo cuccokat, amire a konstans egyebkent valo, hanem konfiguraciohoz, amire viszont az nem valo.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Egy up, hogy ne vesszen feledesbe egy ilyen sugerseg. :D
Valami ilyennel kellene kezdened...
- A hozzászóláshoz be kell jelentkezni
na, megjott a masik okostojas is. Elobb meg kene ertened a feladatot, nem gondolod? LOL :-)
- A hozzászóláshoz be kell jelentkezni
Feladat? ahahahahahhah
- A hozzászóláshoz be kell jelentkezni
ha ragaszkodsz a konstansokhoz:
$config['foo'] = 'bar';
$config['csigabiga'] = 'batkamano';
foreach ($config as $k => $v) {
define($k, $v);
}
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
nem-nem, nekifutok megegyszer.
van egy program, aminek a konfigja egy csomo define()-ban van a default ertekekkel. Ezt a userek (akik telepitik es beallitjak, nem pedig akik hasznaljak!) kedvukre testre szabjak. Eddig szep es jo. De jott egy olyan keres, hogy x db default erteket hadd valtoztassanak meg ugy, hogy ha a default pl. define('A', 5) de o beallit define('A', 8)-t, akkor az a helyi (sitespecifikus) ertek legyen az A erteke (=8), es ne a default (=5). Ha nem biralja felul A-t, akkor annak 5 az erteke tovabbra is.
Jelenleg ez megoldhato ugy, hogy a config.php elejen behuzom a site-config.php-t, amiben a sitespecifikus ertekek vannak, es mivel egy konstanst nem lehet felulirni, igy ez jol is mukodik. 1 aprosag van: ha felul probalsz irni 5 konstanst, akkor 5 notice uzenetet kapsz erte, amit el kene kerulni, mert a hibakezelessel ne menjen el az ido.
Erre egy lehetoseg az, hogy a config.php-ban minden define() elott megnezem, hogy vajon definialva van mar: if(!defined(...)) define(...)
De amint azt fentebb is mondtam, lehet, hogy az lesz, hogy a user telepiteskor hadd tekerje kedvere a konstansokat, majd amikor verziofrissites jon, akkor egy upgrade.php script ebbe irja bele az uj dolgokat, igy nem kell ujra es ujra a default konfigban tekergetni a mar korabban megvaltoztatott ertekeket.
- A hozzászóláshoz be kell jelentkezni
Én kisfiú vagyok, lehet ezért nem értem, hogy hol itt a kérdés...
Ugye állítólag nagy a forgalom, fontos a teljesítmény. Nem tudom, hány konfigurációs konstansod van, de ha sok, akkor a minden oldalletöltésnél való összefésülés egy teljesen felesleges overhead.
Én szívem szerint úgy csinálnám, ahogy a hozzászólásod végén írod. Ha az offline működés nem megfelelő, akkor verzióztatnám a userekkel a saját konfigjukat, induláskor azt nézném meg, hogy változott-e a verzió, és ha igen, akkor fésülném össze a két configot egy harmadikba, amit aztán includeolnék. Vagy valami ilyesmi.
- A hozzászóláshoz be kell jelentkezni
config.php:
$config['A'] = '5';
config-site.php:
$config['A'] = '8';
ize.php:
include 'config.php';
include 'config-site.php';
foreach...
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Azon kívül, hogy már sokan (jogosan) megírták, hogy hülyeség a konstansokat erre használni, az esetleg nem jutott eszedbe, hogy először húzd be az user konfigját, utána a defaultokat, ha még nincs definiálva? :)
De tökmindegy, nem erre valók a konstansok. Erőlködhetsz itt, de attól még te akarsz hülyeséget.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Komolyan, legyel mar konstrukltiv. Miert nem jo a konfigok asszociativ tombbe valo athelyezese? Egy csomo szopast megsporolnal, kezdve az update.php -vel.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
En szerintem is ez a te megoldasod.
A user kedvere definialhat ertekeket a config tombben, akar felul is irhatja, a te dolgod, meg az, hogy generald az allandokat.
>>A Linux olyan mint az asszony, már fogalmad sincs miért választottad.<<
- A hozzászóláshoz be kell jelentkezni
a configod legyen egy tomb.
a tobbit radbizom.
- A hozzászóláshoz be kell jelentkezni
Lehet overkill, de mi lenne, ha csinálnál egy default konfigot. Azt beolvassa a script, majd az egyéni beállításokat is beolvassa és a kettőt mergéli?
- A hozzászóláshoz be kell jelentkezni
De miért nem használsz változókat?
- A hozzászóláshoz be kell jelentkezni