Autor | Zpráva | ||
---|---|---|---|
Fisak Profil |
Zdravím. Vytvořil jsem si svůj vlastní CMS, ještě není na 100% dokončený, ale i tak bych rád slyšel vaše názory na tento systém co změnit co zlepšit čeho se vyvarovat. Nežádám kritiku ale spíše rady jak co udělat lépe. Zde url na stáhnutí http://www.ulozto.cz/12469944/beta-insignia-cms-rar .. předem díky za každý názor :-)
|
||
panther Profil |
Fisak:
nemáš někde demo verzi k vyzkoušení online? Nevím, jestli se mi chce stahovat nějaký rar, rozbalovat, nahrávat na server (pravděpodobně i vyčleňovat prostor v DB)... |
||
Fisak Profil |
#3 · Zasláno: 11. 1. 2012, 16:45:25
No mě spíš šlo o to kouknot se do kódu a říct k tomu něco ... jinak demo nikde nemam no :(
|
||
Mastodont Profil |
#4 · Zasláno: 11. 1. 2012, 16:54:18
require ($_SERVER["DOCUMENT_ROOT"] ."/_system/opconfg.php"); Tak tento způsob inkludování jsem IMHO ještě neviděl, no ale pokud to funguje ... |
||
Fisak Profil |
#5 · Zasláno: 11. 1. 2012, 17:03:04 · Upravil/a: Fisak
Mastodont:
Jj funguje to ... jak to děláš ty ?? dáváš jenom čistě require ("_system/opconfg.php"); nebo jak ? |
||
Mastodont Profil |
#6 · Zasláno: 11. 1. 2012, 17:07:35
klasicky přes dirname(__FILE__)
Spoléhat na libovolnou $_SERVER hodnotu je IMHO dost o hubu ... |
||
Fisak Profil |
#7 · Zasláno: 11. 1. 2012, 17:12:52
Mastodont:
Aha .. zkusím počkat ještě na názory ostatních a trochu pogooglit kdyžtak to předělám :-) |
||
jenikkozak Profil |
#8 · Zasláno: 11. 1. 2012, 17:34:37 · Upravil/a: jenikkozak
Fisak:
V podstatě všechny výstupy databáze procházíš cyklem, ačkoliv předtím sám ověříš, že dotaz vrací pouze jeden výsledek. Proč? $stranka=db_system("SELECT * FROM page where page = '".mypage(page)."'"); if(db_system_num($stranka) == 1) { //je-li jen jeden výsledek... while ($stranka_echo=db_system_array($stranka)) { //...tak ho stejně projdeme cyklem Funkce lang_change() je hodně podivná. Budeš-li chtít přidat další jazyk, to jej budeš doplňovat do všech těch větví if-elseif-else plus přidávat další elseify? if($razeni <> "") $serazeni = "ORDER by $razeni"; //není řazení prázdný řetězec? elseif($razeni == "") $serazeni = ""; //řazení není neprázdný řetězec. Otestujeme proto, jestli náhodou není prázdný. Náhodou to vyšlo! Je prázdný. Soubor function.db.php ukazuje, že jsi placen podle počtu funkcí, které tvoříš. Proč jinak bys měl tolik totožných funkcí s různými názvy? |
||
Fisak Profil |
#9 · Zasláno: 11. 1. 2012, 18:00:39 · Upravil/a: Fisak
jenikkozak:
„Soubor function.db.php ukazuje, že jsi placen podle počtu funkcí, které tvoříš. Proč jinak bys měl tolik totožných funkcí s různými názvy?“ Toto sem moc nepochopil ... můžeš mi přiblížit tvou myšlenku ?? function.db.php je právě udělán tak aby si na každý výpis ze systému použil db_system(); na každý řetězec z databáze "system" se použije db_system_array(); a na zjištění počtu řádku db_system_num(); |
||
jenikkozak Profil |
#10 · Zasláno: 11. 1. 2012, 18:10:47
Fisak:
„Toto sem moc nepochopil ... můžeš mi přiblížit tvou myšlenku ??“ function db_system_num($retezec) { static $connected_sys = false; if($connected_sys === false) db_connect(db_name_system); return @mysql_num_rows($retezec); } function db_users_num($retezec) { static $connected_us = false; if($connected_us === false) db_connect(db_name_users); return @mysql_num_rows($retezec); } function db_content_num($retezec) { static $connected_cont = false; if($connected_cont === false) db_connect(db_name_content); return @mysql_num_rows($retezec); } |
||
Fisak Profil |
no taky pravda :-) ale proč nepouužít tuto fci ?? však to nevadí nebo to má něnjaký vliv na rychlost, bezpečnost ??
Moderátor Petr ZZZ: Otazník stačí jeden a nepatří před něj mezera.
|
||
jenikkozak Profil |
#12 · Zasláno: 11. 1. 2012, 18:42:27
Fisak:
„ale proč nepouužít tuto fci ?? však to nevadí nebo to má něnjaký vliv na rychlost, bezpečnost ??“ Nemohl bys prosím psát normálněji ??????? To, že tam máš spoustu zbytečného nepořádku ve formě spousty proměnných a funkcí, má vliv na to, že jsem si řekl, že se v tom přehrabovat nebudu. Čím více lidí otrávíš, tím je menší pravděpodobnost, že ti tam nějaké bezpečnostní chyby najdou. Na rychlost to vůbec žádný vliv nemá. Ba naopak. Čím více nepoužívaných prvků tam bude, tím bude skript zpracováván rychleji. Co je to za blbost? Rovnou tam na začátku dej skript, co bude počítat po jedné do milionu a zpět, a pak se zeptej, proč to vlastně nepoužít. |
||
SeparateSK Profil |
#13 · Zasláno: 11. 1. 2012, 19:18:33
ach jaj:
Warning: require(C:/wamp/www//_system/opconfg.php) [function.require]: failed to open stream: No such file or directory in C:\wamp\www\CMS\BETA Insignia CMS\index.php on line 7 Fatal error: require() [function.require]: Failed opening required 'C:/wamp/www//_system/opconfg.php' (include_path='.;C:\php5\pear') in C:\wamp\www\CMS\BETA Insignia CMS\index.php on line 7 -a to som musel zmazať .htaccess aby sa mi index.php zobrazil , lebo s suborom .htaccess vypisovalo 404 Error - tým pádom sa mi v localhoste v zložke CMS nezobrazil ani súbor. A keď mi doplo, že sa to nemá extrahovať do lubovolnej zložky ,ale musí to byť rovno na indexe domény napr : blabla123.sk a nie na blabla123.sk/blabla, tak mi to vypísalo: Fatal error: Call to undefined function symlink() in C:\wamp\www\_system\opconfg.php on line 7 |
||
Fisak Profil |
#14 · Zasláno: 11. 1. 2012, 19:20:39 · Upravil/a: Fisak
SeparateSK:
ouč kouknu na to :-) jinak díky moc :-) nejsem si jistý ale pokud na localu nemáš symlink tak by ti to nemělo zapnout ten symlink. Tu je podmínka: if (!preg_match("/symlink/i", ini_get('disable_functions'))) {... |
||
Tori Profil |
#15 · Zasláno: 11. 1. 2012, 19:26:51 · Upravil/a: Tori
Fisak:
Pokud funkce symlink vůbec v systému není podporovaná (= windows před W.Vista a PHP < 5.3), tak nemůže být ani ve vypnutých funkcích, ne? (koukněte do manuálu, kde to jak funguje, já s windows+php nemám zkušenosti žádné, tak nemůžu poradit alternativu). |
||
Fisak Profil |
#16 · Zasláno: 11. 1. 2012, 19:28:31
Tori:
aha to je ten důvod.. dobrá pokusím se o nápravu :-) díky... |
||
SeparateSK Profil |
#17 · Zasláno: 11. 1. 2012, 19:32:59
OK error chápem:
„Note: For Windows only: This function will only function if the system you run PHP from is Windows Vista/Windows Server 2008 or greater. Windows versions prior to that does not support symbolic links.“ viz. http://sk.php.net/symlink Chudáci tí čo majú XP :) |
||
Nox Profil |
#18 · Zasláno: 11. 1. 2012, 19:34:39 · Upravil/a: Nox
Fisak:
„ale proč nepouužít tuto fci ??“ Protože proč ztrácet čas psaním milionu stejných funkcích, když ho můžeš věnovat na něco jiného + duplicita, zhoršení udržovatelnosti - když. budeš chtít něco upravit, chceš to dělat 30x? (zdravím OpenCart) DRY |
||
Fisak Profil |
#19 · Zasláno: 11. 1. 2012, 19:35:53 · Upravil/a: Fisak
Nox:
ok předělám to.... a díky za radu :-) SeparateSK: ok hodim tam ještě podmínku o infu OS a verzi PHP |
||
Nox Profil |
#20 · Zasláno: 11. 1. 2012, 19:54:22
1) Proč složky začínají _ ?
2) Chtělo by to se asi občas mrknout do slovníku ... http://www.thefreedictionary.com/actualization $akta? redirects_page => redirect_page etc. 3) Nedoporučuje se psát ?> (když se za to dostane mezera, bude už odeslán výstup) 4) První soubor co jsem otevřel - SQL injection díra (admin/actualization) 5) Magické konstanty (stejný soubor: URL, zpráva (aspoň kdyby to šlo teda přes lokalizující funkci)) 6) Nedostatečně popisné názvy funkcí - lang() co dělá? current_lang, nebo lépe get_(current_)lang 7) _html_modules/defense (proč defense?): co když přijde argument, který není v poli? Btw. ty číselné indexy nemusíš mít jako řetězce 8) \Index.php: //kontrola spojení s db ... to je asi neaktuální komentář; proč die()?, raději rovnou přesměruj na instalaci 9) Pokud chceš u header hned přesměrovat, tak za to dej exit - header sám pouze nastavuje hlavičky ... Každopádně určitě oceňuju že se snažíš, je za tím vidět docela hodně práce a snad jsi se tedy v průběhu naučil řadu nových věcí |
||
Fisak Profil |
#21 · Zasláno: 11. 1. 2012, 20:30:11
Nox:
Dobře tedy... zkusím to opravit tak aby složky nezačínali _ a dále předělám určité názvy fcí. Taky dále rovnou budu přesměrovávat na instalaci. U tohodle sem právě váhal ale dobře když myslíš že je to vhodnější rovnou přesměrovávat... SQL injection sem docela pořešil všude ovšem něco mi mohlo uniknout.. zkusím vše znova projít. Jinak co jaká funkce dělá je napsáno v dokumentaci. K bodu 9. Mám tedy do fce redirect_page(); za to header("Location: ... dát exit ?? k přesměrování používám jen tuto fci v celém systému. Jinak díky za rady určitě si mi pomohl :-) |
||
Nox Profil |
#22 · Zasláno: 11. 1. 2012, 20:55:57
Např. v system/core.php máš přesměrování přes header asi.
Jj, pokud má dojít k okamžitému přesměrování, tak už další zpracování nechceš a použiješ exit (je to možné ještě třeba přes exceptions, ale to je o něco složitější a jelikož je nikde sám nepoužíváš...) S tím přesměrováním to není kritické, jen mi to přišlo lepší Co funkce dělá by mělo jít poznat hned, člověk by neměl musel lézt do dokumentace |
||
Fisak Profil |
#23 · Zasláno: 11. 1. 2012, 21:07:20
Nox:
s tím souhlasím a již sem to přepsal na get_current_lang(); a také sem již předělal function redirect_page($odkaz, $odkaz2 = 0, $odkaz3 = 0) { header("Location: ".options(mod_rewrite, $odkaz, $odkaz2, $odkaz3).""); exit; } |
||
panther Profil |
#24 · Zasláno: 11. 1. 2012, 21:08:44
Fisak:
z jakého důvodu máš na konci (tady, a pravděpodobně i jinde) přilepení ten prázdný string ."" ? Je tam zbytečný, vyhoď jej.
|
||
Fisak Profil |
#25 · Zasláno: 11. 1. 2012, 21:14:15
panther:
provedeno |
||
Ugo Profil |
#26 · Zasláno: 12. 1. 2012, 07:51:11 · Upravil/a: Ugo
Fisak:
?> se vynechává protože znak (mezera, neviditelný znak) za ním může odeslat hlavičky, ovšem kritické to podle mě není a přijde mi to alespoň čistší, proč ukončovat <td> když to není třeba? k tomu přesměrování bych ještě dal vypsání odkazu die('Přesměrování se nezdařilo, pokračujte <a href="'.options(mod_rewrite, $odkaz, $odkaz2, $odkaz3) .'">zde</a>');
kontrole symlinku, proč prostě nepoužít function_exists('symlink'); :) v šablonách mi nějak chybí uvozovky <?php echo options(address, http); ?> redirects_page(admin, login) and die(); a špatně (i když také funkčně) psaná pole "$menu_echo[name]" a $v_menu_echo[id] v defense jsem viděl print, echo to zvládne zrovna tak a rychleji v admin/php_modules/login máš použité eregi_replace, doporučuji nahradit za preg_replace i jinde, výkon je razantně lepší a předevsím http://cz.php.net/manual/en/function.eregi-replace.php v set_module např. spoléháš na existenci proměnné $_GET['run']; asi jí vytváří htaccess, pak by to neměl být problém v PHP modulu actualization se mi nelíbí $akta = file_get_contents('http://www.cherubis.hys.cz/_uploads/version.txt'); $sql_version = db_system("UPDATE options set text = '$akta' where type = 'version'"); v případě že někdo podvrhne ten soubor, může teoreticky poškodit mnoho uživatelů systému a přikláním se k nahrazení $_SERVER["DOCUMENT_ROOT"] všude za konstantu obsahující dirname(__FILE__); pak není problém v htaccessu přepsat (resp. připsat) rewritebase a frčí se ve složce, pro mě cokoliv co neumí běžet v podsložce ztrácí veškerou váhu functions.string - zbytečný zápis podmínky if($razeni <> "") $serazeni = "ORDER by $razeni"; elseif($razeni == "") $serazeni = ""; $serazeni = "" if(trim($razeni) <> "") $serazeni = "ORDER by $razeni"; v index.php mě zaujalo require (dirname(__FILE__) ."/_system/config-mysql.php"); new Databaze(); function db_connect($db_name){ if(!@mysql_connect(db_server,db_login,db_pass)){ $this->__err_message(); return -1; } else { if(!@mysql_select_db($db_name)){ $this->err = "Nepodařilo se vybrat databázi."; return -1; } else { mysql_query("SET character_set_results = utf8"); mysql_query("SET character_set_connection = utf8"); mysql_query("SET NAMES utf8"); return 1; } } } |
||
Fisak Profil |
#27 · Zasláno: 12. 1. 2012, 11:23:40 · Upravil/a: Fisak
Ugo:
oktakže: 1. nahradil sem všechny ty requeiry na require (dirname(__FILE__) ."/cesta k souboru"); 2. s tim že neni potřeba elseif ani else už tu někdo psal tak sem to nahradil už včera 3. do toho souboru actualization sem hodil ochranu proti php injekci 4. všude přidány uvozovky např. <?php echo options("address", "http"); ?> 5. opraveno: „zároveň vídám zbytečný zápis return "$prikaz2";“ ------------------------------------------------------------------------------------------------------------------------ „a špatně (i když také funkčně) psaná pole "$menu_echo[name]" a $v_menu_echo[id]“ - bohužel nevím co je na tomto špatně... jinak děkuju moc za všechny připomínky :-) |
||
Ugo Profil |
#28 · Zasláno: 12. 1. 2012, 11:45:05
Fisak:
sakra to je fofr :-) s takovouhle podporou by to zas nemuselo být do budoucna špatné ;) ještě k tomu dirname() mě nenapadlo, nejlepsí máš udělat si na začátku nejakou konstantu podle indexu a pak používat tu, já že jsem špatně poradil nahradit to přímo tím, protože pak by vznikl problém s cestami jiný. „bohužel nevím co je na tomto špatně...“ to samé jako na té funkci bez uvozovek, PHP se nejprve snaží najít konstantu id, pokud si zapneš zobrazování notice chyb tak se možná budeš divit :) (nevím kolik je už nahrazeno), tohle chování nedělá v případě echo "$array[string]" ale jen v echo $array[string], ovšem stejně je ten zápis bez uvozovek pochybný a nehezký, správně je prostě echo $array['string']; :) |
||
Fisak Profil |
#29 · Zasláno: 12. 1. 2012, 11:58:19 · Upravil/a: Fisak
Ugo:
dobře nahradím vše takto echo $array['string']; - přidání apostrofů... a předělal sem tu fci function load_page($prikaz) { require (dirname(__FILE__) ."/$prikaz"); } Jo jinak ještě k tvému předchozímu příspěvku. Psal si > k tomu přesměrování bych ještě dal vypsání odkazu > die('Přesměrování se nezdařilo, pokračujte <a href="'.options(mod_rewrite, $odkaz, $odkaz2, $odkaz3).'">zde</a>'); tak sem to udělal takto function redirect_page($odkaz, $odkaz2 = 0, $odkaz3 = 0) { if(header("Location: ".options("mod_rewrite", "$odkaz", "$odkaz2", "$odkaz3"))) { exit; } else { die('Přesměrování se nezdařilo, pokračujte <a href="'.options(mod_rewrite, $odkaz, $odkaz2, $odkaz3).'">zde</a>'); } } ještě dotaz... dá se nějak udělat to aby se ten require (dirname(__FILE__) ."/$prikaz"); načítal tak jak sem to měl původně ?? tzn. když mam složku index.php v ní načítam /system/config-mysql.php a v tom načítám /system/config.php bohužel s tim dirname musim používat cestu např. "../../../slozka/soubor.php" což mě docela obtěžuje.. radši bych tam tedy vždy dával absolutní cestu tzn. "slozka/slozka/slozka/slozka/soubor.php" nikoliv "../../../slozka/soubor.php" |
||
peta Profil |
#30 · Zasláno: 12. 1. 2012, 13:54:58
Mno, nevim, kolik tech require mas, ale uz od 5 bych uvazoval o nejake funkci.
my_require("/$prikaz"); // require (dirname(__FILE__) ."/$prikaz"); V pripade, ze zmenis cestu, abys to pak opravoval v kazdem souboru, ne? :) |
||
Téma pokračuje na další straně.
|
0