Užitečné funkce pro PHP - díl 1.
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); }
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
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ě.
[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.
[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.
[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
[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í...
[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 :(-
[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 :)
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
V druhem skriptu je syntakticka chyba. Kdyz uz tam je ta funkce
serverVar
(navic v tomto pripade zcela zbytecna) je radekif (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.
[10] ten řádek je tam naprosto nutný, pro w3c validátor totiž dává MIME typ
application/xhtml+xml
, i když w3c reportuje vHTTP_ACCEPT
něco jiného..Ohledně strpos versus strstr - strpos NENÍ rychlejší. Howgh.
[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.