Užitečné funkce pro PHP - díl 1.

MyEgo.cz

home foto blogy mywindows.cz kontakt

Užitečné funkce pro PHP - díl 1.

PHP 29.07.04

V tomto seriálu budu publikovat jednoduché funkce v PHP, které jsou ovšem velice užitečné pro běžné programování redakčního systému.

Vytvoření náhodného hesla pro uživatele

function createPassword($length){
 $vowels = array('a', 'e', 'i', 'o', 'u');
 $cons = array('b', 'c', 'd', 'g', 'h', 'j', 'k', 'l', 
               'm', 'n', 'p', 'r', 's', 't', 'u', 'v', 
               'w', 'tr', 'cr', 'br', 'fr', 'th', 'dr', 
               'ch', 'ph', 'wr', 'st', 'sp', 'sw', 'pr',
               'sl', 'cl');
 $num_vowels = count($vowels);
 $num_cons = count($cons);
 $password = '';
 for($i = 0; $i < $length; $i++)
   $password .= 
     $cons[rand(0, $num_cons - 1)] . 
     $vowels[rand(0, $num_vowels - 1)];
 return substr($password, 0, $length);
}

Zaslání hlaviček (pokud je příjemce umí)

function serverVar($name) {
 return $_SERVER[$name];
}
function sendContentType($contenttype, $charset = 'utf-8') {
 $accept=false;
 if ($contenttype == 'application/xhtml+xml') {
  if (stristr(serverVar("HTTP_ACCEPT"),"application/xhtml+xml")) {
   if (preg_match("/application\/xhtml\+xml;q=0(\.[1-9]+)/i",serverVar("HTTP_ACCEPT"), $matches)) {
    $xhtml_q = $matches[1];
    if (preg_match("/text\/html;q=0(\.[1-9]+)/i",serverVar("HTTP_ACCEPT"), $matches)) {
     $html_q = $matches[1];
     if($xhtml_q >= $html_q) $accept=true;
    }
   } else
   $accept=true;
  }
  if (stristr(serverVar("HTTP_USER_AGENT"),"W3C_Validator")) $accept=true;
 }
 // cannot accept xhtml+xml
 if (!$accept && ($contenttype == 'application/xhtml+xml')) $contenttype='text/html';
 // content type
 header('Content-Type: ' . $contenttype . '; charset=' . $charset);
}

Komentáře

  1. 1 Pavel SPS 29.07.04, 01:07:12
    FB

    Davas diteti kulomet?

    a] nejsem schopen to naprogramovat sam. Pak mi ale zdrojove kody bez komentare spise uskodi, nez pomohou.

    b] jsem to schopen naprogramovat sam, pak to nectu

    Muj soukromy nazor.

    Ty funkce ani nejdou pouzit jako "cerna skrinka", protoze chybi:
    a] popis vstupnich parametru
    b] popis navratove hodnoty
    c] popis co presneji ta fce dela

  2. 2 markon 29.07.04, 02:07:12
    FB

    To generování hesla se jednodušeji dělá, když vezmeš aktuální čas, uděláš jeho MD5 a vytáneš z něho přesně kolik znaků potřebuješ. Proč to děláš tak složitě?

    To generování content-type je dobré, přesně tohle už delší dobu používám, ovšem pozor všem neznalým, pokud neuzavřte byť jen jeden tag, nezobrazí se vám vůbec nic, naštěstí v PHP5 je integrované HTML Tidy, které by tohle mělo časem opravovat automaticky na straně serverů. Myslím, že lepším řešením než opravovat chyby u prohlížečů je opravovat je na serveru, protože tam to vidí každý, když je to špatně.

  3. 3 Radek Hulán 29.07.04, 05:07:35
    FB

    [2] pokud vezmu md5, tak to heslo nebude vyslovitelné, takto ano, bude to normální relativně pěkné heslo, co se dá i zapamatovat, takže proto ;)

    PS: pro Pavla, srand() není potřeba.

  4. 4 Roman 29.07.04, 07:07:44
    FB

    [1] mne to pripada uplne jasne a zrozumitelne. (Inak samozrejme som si funkciu onehda robil sam a s filtrom na neslusne slova ;-) Ono klient ktory sa prihlasi do systemu a pride mu vase heslo je "kokoti18" nebude velmi nadseny.

    [2] Presne ako pise Rado, tento generator hesla je robeny s umyslom vytvorit heslo ktore sa da vyslovita lahko zapamatat.

  5. 5 markon 30.07.04, 08:07:27
    FB

    [1] PHP je samo o sobe kulomet dany diteti, protoze tak mocny nastroj, pro ktery mohou programovat ehm... Kdyby nebylo v PHP tolik lam, mohl by to byt znatelne uznavanejsi jazyk, t.j.fakt.

    [3] Ja si stejne myslim, ze si nkdo nezapamatuje tebou generovane heslo, pokud nebude obsahovat nejaka slova. Heslo mamomamo no alespon se to lepe pise, ale to tak jedine

  6. 6 kakoo 30.07.04, 09:07:57
    FB

    [2] [3] navíc pokud to vypočteš z aktuálního času, je to poměrně malá množina hesel a nebude zase až takový problém se do tvé aplikace dostat, zvlášť pokud budu vědět, že dotyčný se registroval někdy kolem 20:30 v pondělí...

  7. 7 markon 30.07.04, 10:07:32
    FB

    [5] [6] Počítám to z mikrosekund, takže myslím že to docela problém bude, navíc je tam daná předpona a tu neznáš, nicméně fakt je, že by se možná měli spíš generovat náhodná čísla :-D

    Nicméně to tu asi nebudeme pitvat, nabízím nové téma - http://www.pcsvet.cz/art/ar...

    Přečti si to až dolů a budeš se chytat za hlavu, to mě teď trápí více, že lamy programují v PHP a kazí jméno těm co umí programovat :(-

  8. 8 Pavel SPS 31.07.04, 09:07:13
    FB

    [6] pridas microtime, IP adresu klienta, cas posledniho restartu serveru vahu tve matky... v tom bych problem nevidel.

    Ohledne nedokumentovani fci trvam na svem. I kdyz bude fce jen scitat 1+1, tak tam komentar byt musi. Jeste ze nemusim cist vase zdrojaky :)

  9. 9 kr4UT1k 17.10.04, 10:10:03
    FB

    Stare tema, ale prece. Ten prvni zdrojak je samovysvetlujici, ten druhy by nejaky komentar asi potreboval, jsou tam takovy nepochopitelny funkce
    !stristr($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml')
    , ale mozna jsem opravdu MOC lama

  10. 10 JK 19.12.04, 10:12:32
    FB

    V druhem skriptu je syntakticka chyba. Kdyz uz tam je ta funkce serverVar (navic v tomto pripade zcela zbytecna) je radek if (stristr(serverVar["HTTP_USER_AGENT"],"W3C_Validator")) $accept=true;.
    Navic bych hadal, ze strpos bude rychlejsi nez stristr , v druhem pripade je mohu zamenit zcela jiste, v prvnim bych to riskl taky.

  11. 11 Radek Hulán 19.12.04, 10:12:51
    FB

    [10] ten řádek je tam naprosto nutný, pro w3c validátor totiž dává MIME typ application/xhtml+xml, i když w3c reportuje v HTTP_ACCEPT něco jiného..

    Ohledně strpos versus strstr - strpos NENÍ rychlejší. Howgh.

  12. 12 JK 19.12.04, 11:12:40
    FB

    [11] Ojoj, koukam, ze jsem pri snaze projit pres spam filtr po 6x nenapsal prispevek uz zcela spravne.
    Melo tam byt, ze dany radek obsahuje chybu, bud pisu
    serverVar("HTTP_USER_AGENT") nebo $_SERVER["HTTP_USER_AGENT"] ale ne to, co tam je - to je syntakticka chyba.
    W3C validator posila ted prazdne HTTP_ACCEPT, to mate pravdu.
    strstr je mozna stejne rychle jako strpos (ackoliv strstr vraci retezec a tudiz by tam mela byt vetsi rezie) ale case insensitive porovnavani (ja jsem porovnaval stristr a strpos) je zcela jiste pomalejsi.