Rasťo Turek / 16. 11. 2003, 00:00
Vítam Vás pri ďalšej časti seriálu php v praxi. Dnes si pozrieme tri malé skriptíky, ktoré Vám dúfam pomôžu a zároveň skrášlia a vylepšia Vaše stránky. Tieto tri skripty nájdete aj na konci zpakované do zipu a všetky budú v jednom súbore. Určite budete namietať, že som Vám v predošlom časti sľúbil týchto typov päť, ale ja už nemám proste o čom písať. Takže poďme pekne pomaličky a hneď sa pozrime na prvý z našich príkladov.
Za aký čas sa nám stránka vygenerovala?
Každý programátor sa snaží urýchliť načítavanie stránok pre svojich užívateľov. Ako však zistiť, za aký čas sa užívateľom stránky generujú? Úplne jednoducho.
Napíšeme si jednoduchý skriptík, ktorý nám túto informáciu zobrazí.
function getmicrotime()
{
list($usec, $sec) = explode(' ', microtime());
return ((float)$usec + (float)$sec);
}
$stime = getmicrotime();
$endtime = getmicrotime() - $stime;
$runtime = number_format($endtime, 5);
echo "Stránka sa načítala za $runtime sekúnd";
?>
Vytvoríme si jednoduchú funkciu ktorú nazveme getmicrotime(). Na zistenie času použijeme funkciu list(), táto funkcia sa používa na priradenie zoznamu premenných v jednej operácií. Ďalej použijeme funkciu explode() na oddelenie výpisu času pomocou funkcie microtime(). Nakoniec vrátime von z funkcie aktuálny čas. Ďalej si priradíme tri premenné a to $stime, $endtime a $runtime. Do prvej premennej si zavoláme funkciu getmicrotime() na zistenie aktuálneho času a tým určíme začiatok načítavania stránky. Do druhej premennej si zas zavoláme funkciu getmicrotime()no a od tejto funkcie odčítame predošlí hodnotu a tak dostaneme výsledok, ktorý nám určuje, za aký čas sa mu stránka vygenerovala. Keďže takýto výstup by nám nič nevravel, tak si ho upravíme pomocou funkcie number_format(), ktorá nám vráti číslo až ako jednu stotisícinu a to je čas, za ktorú sa stránka návštevníkovi vygenerovala.
Tento skript môžete používať všade tam, kde chcete užívateľom zobraziť, koľko trvá kým sa im Vaša stránka načíta. Ja tento skript však používam na to, aby som zistil, koľko to trvá v priemere a ukladám tieto výsledky do databázi a snažím sa ich stále zlepšovať.
Generátor náhodného reťazca pomocou MD5
Poďme si ukázať, ako si vygenerovať náhodný reťazec pomocou MD5. Najskôr si ukážeme samotný skript a potom si ho samozrejme aj vysvetlíme.
function na_hash()
{
$t=time();
$pid=GetMyPid();
$hash=substr($t,-6).$pid;
$hash=MD5(UniqID($hash));
return $hash;
}
echo na_hash();
?>
Vytvoríme si funkciu na_hash(), do ktorej si určíme zopár parametrov. Najskôr si do premennej $t určíme aktuálny čas. Potom si pomocou funkcie GetMyPid() si vypýtame od nášho php číslo aktuálneho procesu. Ďalej si orežeme výstup aktuálneho času na štyri miesta a pripojíme tieto štyri čísla k vrátenému číslu aktuálneho procesu. No a nakoniec si upravíme premennú $hash pomocou funkcií MD5() a UniqID(). Vystúpime z funkcie a nakoniec si zavoláme našu funkciu.
Pozor! Ak by ste chceli použiť tento generátor, tak si zmeňte napríklad orezanie času na 4 či dokonca 2 čísla, aby to nebolo úplne zhodné. Ďalej je ešte jeden problém a to ten, že takéto heslo, ktoré má 33 znakov je prakticky nezapamätateľné a tak odporúčam ho používať napríklad len na overenie emailu. Príklad: http://www.vasadomena.sk/over.php?email=info@lammer.sk$string=4fe3e09b1c32d9d332be3922f03d72b9
a takto to overiť trebárs v databázi. Nič zložité. Poďme však ďalej.
Na akom softe beží dopytovaný stroj?
Je to podľa môjho názoru aspoň zaujímavý skript. Je to úplne jednoduché a zvládnete to aj pomocou dokumentácie k php. Takže ako vždy, najskôr si script ukážeme a potom si ho vysvetlíme.
// prebrané z interval.cz zaručí zaregistrovanie všetkých premenných, ktoré sa predajú
foreach($_REQUEST as $ind => $val)
{
$val=addslashes($val);
eval("$".$ind."="".$val."";");
}
// vytvoríme si funkciu na overenie dopytovaného servera
function ServerOver($ServerURL)
{
// otvoríme si socket 80 na ktorom by mali bežať webové služby a zadáme meno servera
$filepointer = fsockopen($ServerURL,80,$errno,$errstr);
// ak sa nám nepodarí pripojiť k dopytovanému stroju, vypíšeme chybu
if(!$filepointer)
{
$Server="Error: $errstr ($errno)
n";
}
else
{
// zašleme hlavičku ako požiadavku o bežiacu službu na dopytovanom stroji
fputs($filepointer,"GET / HTTP/1.0nn");
// zistí, či je descriptor na konci súboru a ak nie, tak prevádza cyklus, kým nie je
while(!feof($filepointer))
{
// prečítame si, čo nám server vrátil a to v dĺžke 4096 znakov
$Server=fgets($filepointer,4096);
// vyhľadá vo vrátenom výsledku reťazec Server podľa zadaného kritéria
if (ereg("^Server:",$Server))
{
// najskôr oreže a potom nahradí hľadaný výraz prázdnym poľom
$Server=trim(ereg_replace("^Server:","",$Server));
// zastaví prevádzanie cyklu
break;
}
}
// uzavrieme spojenie
fclose($filepointer);
}
// vrátime údaje von z funkcie
return($Server);
}
// overovanie výstupu ak nie je prazdne tak ulož premennú
if ($ServerURL<>"")
{
$Server=ServerOver($ServerURL);
}
// ak sú predané data správne, vypíšeme informácie o servery formátované ako zdrojový kód
if ($Server<>"" and $ServerURL<>"")
{
echo("<PRE>Server $ServerURL beží na $Server.</PRE>");
}
?>
<FORM ACTION="<?php echo($PHP_SELF); ?>" METHOD="post">
http://
<INPUT title="Maximalne 100 znakov" TYPE="text" NAME="ServerURL" SIZE="40" MAXLENGTH="100"><br>
<INPUT TYPE=hidden NAME="Server" VALUE="">
<INPUT TYPE=submit VALUE="Over tento Server!">
<INPUT TYPE=reset VALUE="Reset">
</FORM>
Najskôr je tu kúsoček kódu, ktorý som si požičal od jedného autora z interval.cz, ktorý nám zaregistruje všetky predávané premenné.
Náš kód začína vytvorením funkcie ServerOver() kde budeme predávať nami zadané url. Vo funkcii si otvoríme socket teda spojenie medzi dopytovaným a naším scriptom a prevedieme to pomocou funkcie fsockopen(),ktorá toto spojenie otvára a pri neúspechu nám vracia chybu. Overíme, či sme sa pripojili k dopytovanému serveru a overíme si, či toto spojenie prebehlo v poriadku a ak nie, tak prevezmeme chybu z našej funkcie pre otvorenie spojenia a vypíšeme ju do stránky. Ak je všetko ok ako má byť, zašleme požiadavku ako hlavičku serveru, aby nám vrátil, aká služba u neho beží. Zistíme, či je discriptor na konci súboru, alebo dát, ktoré nám server odosiela, teda či ich má prečítané. Ak to tak nie je, prevádza cyklus, kým to tak nie je a potom si ich my načítame k nám do premennej $Server. Ďalej v premennej $Server nájdeme časť reťazca a potom ho nahradíme a orežeme výstup. Nakoniec zastavíme prevádzanie cyklu a uzavrieme spojenie s dopytovaným serverom. Vrátime údaje von z funkcie a ďalej si overíme, či máme aj premennú $Server, kde ak nie je predaná aj hodnota $Server, tak ju nanovo zaregistrujeme zavolaním našej funkcie. Inak vypíšeme asi niečo podobné: Server localhost beží na Apache/2.0.43 (Win32) PHP/4.4.0-dev. Toto je koniec výpisu a ešte tu máme formulár, ktorý je skutočne jednoduchý. Aby sme si zaručili, že budeme stále zadávať do action=““ stále aktuálny script pomocou premennej $PHP_SELF, ktorá nám zaručí, že táto hodnota bude vždy naša URL. Inak tam máme štyri polia, ktoré nám predajú aktuálne hodnoty a reset a submit. Toť vsio.
Pokúsim sa na Vás opäť apelovať, i keď Vám už určite musím týmto liezť na nervy, ale ja už neviem, o čom by som Vám mal písať a tak neviem, či tento seriál radšej neukončiť a nezačať s niečím novým, ako napríklad so seriálom o vytvorení kvalitného fóra, či guestbooku. Prosím, skúste sa vyjadriť v diskusii a chcem Vás týmto srdečne pozvať do mnou pripravovaného fóra o všetkom možnom, ktoré by sa malo objaviť už do týždňa na www.lammer.sk.
O čom to bude nabudúce? Ani ja neviem, tak sa nechajte prekvapiť. Prajem Vám všetkým mnoho úspechov.
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk