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);
}
Komentáře:
Přidejte nový komentář:
Pro přidání komentáře a hlasování se musíte nejdříve zaregistrovat nebo přihlásit.

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:
odpověz na tento komentářa] popis vstupnich parametru
b] popis navratove hodnoty
c] popis co presneji ta fce dela
- na komentář reagoval Roman — #4
- na komentář reagoval markon — #5
karma: 0 Thursday, 29.07.04, 13:12:05To 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ě.
odpověz na tento komentář- na komentář reagoval Radek Hulán — #3
- na komentář reagoval Roman — #4
- na komentář reagoval kakoo — #6
karma: 0 Thursday, 29.07.04, 14:12:31odpovídá na markon — #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.
odpověz na tento komentář- na komentář reagoval markon — #5
- na komentář reagoval kakoo — #6
karma: 10 Thursday, 29.07.04, 17:35:57odpovídá na Pavel SPS — #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.
odpovídá na markon — #2 Presne ako pise Rado, tento generator hesla je robeny s umyslom vytvorit heslo ktore sa da vyslovita lahko zapamatat.
odpověz na tento komentář karma: 0 Thursday, 29.07.04, 19:44:06odpovídá na Pavel SPS — #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.
odpovídá na Radek Hulán — #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
odpověz na tento komentář- na komentář reagoval markon — #7
karma: 0 Friday, 30.07.04, 08:27:43odpovídá na markon — #2 odpovídá na Radek Hulán — #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í...
odpověz na tento komentář- na komentář reagoval markon — #7
- na komentář reagoval Pavel SPS — #8
karma: 0 Friday, 30.07.04, 09:57:35odpovídá na markon — #5 odpovídá na kakoo — #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 :(-
odpověz na tento komentář karma: 0 Friday, 30.07.04, 22:32:45odpovídá na kakoo — #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 :)
odpověz na tento komentář karma: 0 Saturday, 31.07.04, 21:13:11Stare tema, ale prece. Ten prvni zdrojak je samovysvetlujici, ten druhy by nejaky komentar asi potreboval, jsou tam takovy nepochopitelny funkce
odpověz na tento komentář karma: 0 Sunday, 17.10.04, 22:03:40!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
odpověz na tento komentář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.
- na komentář reagoval Radek Hulán — #11
karma: 1 Sunday, 19.12.04, 22:32:07odpovídá na JK — #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.
odpověz na tento komentář- na komentář reagoval JK — #12
karma: 10 Sunday, 19.12.04, 22:51:36odpovídá na Radek Hulán — #11 Ojoj, koukam, ze jsem pri snaze projit pres spam filtr po 6x nenapsal prispevek uz zcela spravne.
odpověz na tento komentář karma: 1 Sunday, 19.12.04, 23:40:12Melo 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.