« 1 2 »
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
No mě spíš šlo o to kouknot se do kódu a říct k tomu něco ... jinak demo nikde nemam no :(
Mastodont
Profil
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
Mastodont:
Jj funguje to ... jak to děláš ty ??


dáváš jenom čistě require ("_system/opconfg.php"); nebo jak ?
Mastodont
Profil
klasicky přes dirname(__FILE__)

Spoléhat na libovolnou $_SERVER hodnotu je IMHO dost o hubu ...
Fisak
Profil
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
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
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
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); 
}
Proč nepoužiješ místo toho všeho prostě jen mysql_num_rows()?
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
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
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
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
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
Tori:
aha to je ten důvod.. dobrá pokusím se o nápravu :-) díky...
SeparateSK
Profil
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
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
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
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
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
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
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;
}
jen mi stále není moc jasné proč se má vynechávat ?> na konci
panther
Profil
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
panther:
provedeno
Ugo
Profil
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); ?>
výtažek z admin/php_modules/admin/index to samé .. prostě všade kam kouknu :)
redirects_page(admin, login) and die();
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]

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 = "";
elseif zde vůbec není potřeba, dokonce ani else
$serazeni = ""
if(trim($razeni) <> "") $serazeni = "ORDER by $razeni";

v index.php mě zaujalo
require (dirname(__FILE__) ."/_system/config-mysql.php");
        new Databaze();
to new Database mi připadá zbytečné a v functions.db se mi zas zdá divné používat $this, jelikož se mi nezdá žeby to bylo v objektu
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
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
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
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");
}
bohužel nevím moc co máš ty na mysli ...
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>');

}
}
snad je to správně.. jo a ten symlink sem vymazal s tím že už nepoužívám před složkama _ takže tím pádem tato starost o symlink odpadla...


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
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? :)
« 1 2 »

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: