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_ACCEPTně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.