PHP statistika spouštěná JS

Tom Liberec

PHP statistika spouštěná JS
« kdy: 30. 04. 2013, 22:06:52 »
Na www.blassenweb.net je ke stažení zajímavý program. Tedy slibuje být zajímavý avšak nejsem schopný to rozchodit. Není mi úplně jasná funkce některých souborů pouze se domnívám. Má to více souborů. Přemýšlím jak to sem dostat. Zkopíruji soubor HTMP gro je však spíše v php  souboru.

<html lang="cs">
<head>
<meta http-equiv="Content-Type"content="text/html; charset=windows-1250">
<title>Statistika</title>
</head>
<body>

<h1>Statistika</h1>
<p>Tato stránka je ukázka vložení JavaScriptu do Vaší stránky. (JavaScipt si přidejte na konec stránky před tag &lt;/html&gt;.)</p>

<script charset="windows-1250" type="text/javascript">
<!--
///////////////////////////////////
//// UVEĎTE URL STRÁNKY log.php
//// TATO MŮŽE BÝT I NA JINÉM SERVERU
log_url = "http://localhost/az%20wz/demo/stat/log.php";
///////////////////////////////////

var useragent = navigator.userAgent;
var bName = (useragent.indexOf('Opera') > -1) ? 'Opera' : navigator.appName;
var pos = useragent.indexOf('MSIE');
if (pos > -1) {
   bVer = useragent.substring(pos + 5);
   var pos = bVer.indexOf(';');
   var bVer = bVer.substring(0,pos);
}
var pos = useragent.indexOf('Opera');
if (pos > -1)   {
   bVer = useragent.substring(pos + 6);
   var pos = bVer.indexOf(' ');
   var bVer = bVer.substring(0, pos);
}
if (bName == "Netscape") {
   var bVer = useragent.substring(8);
   var pos = bVer.indexOf(' ');
   var bVer = bVer.substring(0, pos);
}
if (bName == "Netscape" && parseInt(navigator.appVersion) >= 5) {
   var pos = useragent.lastIndexOf('/');
   var bVer = useragent.substring(pos + 1);
}

var log_brow = bName + " " + bVer;
var log_plat = navigator.platform;
var log_ref;
if (top.frames.length != 0) log_ref = top.document.referrer;
else log_ref = document.referrer;

var log_string = location.href;
log_string += "|" + log_brow;
log_string += "|" + log_plat;
log_string += "|" + window.screen.width + "x" + window.screen.height;
log_string += "|" + log_ref;

cgi = new Image();
cgi.src = log_url + "?log_string=" + escape(log_string);
// -->
</script>

</body>
</html>


PHP : log.php

<?php
// Zadejte false, nechcete-li každou návštìvu zapisovat do souboru.
$zapis_do_souboru = true;

// Zadejte true, chcete-li obdržet emailová upozornìní o každé návštìvì.
$napsat_email = false;

// Uveïte svùj email
$prijemce = 'uzivatel@server.cz';

// Uveïte maximální poèet øádku ve statistickém souboru
$max_radky = 100;

$ip = getenv ("REMOTE_ADDR");
// Uveïte svoji vlastní IP adresu, nechcete-li zapisovat své vlastní pøístupy.
if ($ip == '00.00.000.000') exit;

////////////////////////// DALŠÍ ZMÌNY NEJSOU ZAPOTØEBÍ
$datum = "./data/datum.cgi";
$pocitadloDnes = "./data/pocitadloDnes.cgi";
$pocitadloVse = "./data/pocitadloVse.cgi";
$ipLog = "./data/ipLog.cgi";
$soubor = './data/logData.cgi';

if (!File_Exists($datum)) exit("
Soubor $datum nenalezen");
if (!File_Exists($pocitadloDnes)) exit("
Soubor $pocitadloDnes nenalezen");
if (!File_Exists($ipLog)) exit("
Soubor $ipLog nenalezen");
if (!File_Exists($soubor)) exit("
Soubor $soubor nenalezen");

//////////////////////////// ZÍSKEJ DATUM POSLEDNÍ NÁVŠTÌVY A DNEŠNÍ DATUM
$klika = fopen($datum, 'r');
if ($klika == false) exit("Nelze otevøít Datum na vstup.");
$stareDatum = fread($klika, filesize($datum));
fclose($klika);
$noveDatum = date("j/m/Y");

if ($noveDatum != $stareDatum) {
   resetujNovyDen($noveDatum, $stareDatum, $datum, $pocitadloDnes, $ipLog);
   resetujLog($soubor, $max_radky);
}

if (stejnaIP($ip,$ipLog)) {
   exit;
}

inkrementujPocitadlo($pocitadloVse);
inkrementujPocitadlo($pocitadloDnes);

/////////////////////////// ZÁPIS STATISTIKY

$log_string = $_GET['log_string'];
list($href,$brow,$plat,$rozl,$ref) = explode('|', $log_string);

$datum = date(Ymd);
$cas = date("H:i:s");

if ($zapis_do_souboru == true) {
   $radek = "$ip" . "|" . "$href" . "|" . "$rozl" . "|" . "$datum" . "|" . "$cas" . "|" . "$brow" . "|" . "$plat" . "|" . "$ref";
   $klika = fopen($soubor, 'a');
   if ($klika == false) exit;
   $radek .= "\n";
   fwrite ($klika, "$radek" );
   fclose ($klika);
}

/////////////////////////// ODESLAT EMAILOVÉ UPOZORNÌNÍ
if ($napsat_email == true) {
   $telo .= "Stránka: $href\r\n";
   $telo .= "Datum:" . date("d/m/Y") . " $cas\r\n";
   $telo .= "Odkud pøišel: $ref\r\n";
   $telo .= "IP adresa: $ip\r\n";
   $telo .= "Prohlížeè: $brow\r\n";
   $telo .= "Platforma: $plat\r\n";
   $telo .= "Rozlišení: $rozl\r\n";
   $hlavicky .= "Content-Type: text/plain; charset=windows-1250\r\n";
   mail($prijemce, 'Na stranky prisel navstevnik!!!', $telo, $hlavicky);
}

/////////////////////////// JE TO STEJNÝ NÁVŠTÌVNÍK? //////////////////////////////

function stejnaIP($ip,$ipLog) {
   $ip = getenv ("REMOTE_ADDR");
   //////////// JE IP ADDRESA V SOUBORU?
   $klika = fopen($ipLog,'r');
   if ($klika == false) exit("Nelze otevøít IP Log na vstup.");
   $data = fread($klika, filesize($ipLog));
   fclose($klika);
   $radky = explode ("\n",$data);
   if (in_array ($ip,$radky)) return true;
   
   //////////// PØIDEJ IP ADDRESSU
   $klika = fopen($ipLog,'a');
   if ($klika == false) exit("Nelze otevøít IP Log na rozšíøení.");
   fwrite ($klika,"$ip\n");
   fclose ($klika);
   return false;
} // end func


//////////////////////////// RESETUJ SOUBORY PRO NOVÝ DEN //////////////////////////
function resetujNovyDen($noveDatum, $stareDatum, $datum, $pocitadloDnes, $ipLog) {
   $klika = fopen($datum, 'w');
   if ($klika == false) exit("Nelze otevøít Datum na výstup.");
   fwrite ($klika, "$noveDatum" );
   fclose($klika);
   
   $klika = fopen($pocitadloDnes, 'w');
   if ($klika == false) exit("Nelze otevøít Dnešní datum na výstup.");
   fwrite ($klika, "0" );
   fclose($klika);
   
   $klika = fopen($ipLog, 'w');
   if ($klika == false) exit("Nelze otevøít IP Log na výstup.");
   fwrite ($klika, "" );
   fclose($klika);
} // end func



///////////////////////////// INKREMENTUJ POÈÍTADLO /////////////////////////
function inkrementujPocitadlo($soubor) {
   $klika = fopen($soubor, 'r');
   if ($klika == false) exit("Nelze otevøít Poèítadlo na vstup.");
   $data = fread($klika, filesize($soubor));
   fclose($klika);
   $data ++;
   $klika = fopen($soubor, 'w');
   if ($klika == false) exit("Nelze otevøít poèítadlo na výstup.");
   fwrite ($klika, "$data" );
   fclose($klika);
} // end func

/////////////////////// OMEZUJE MAX. VELIKOST STAT. SOUBORU /////////////////////
function resetujLog($soubor, $max_radky) {
   $radky = file ($soubor);
   $radky = array_reverse ($radky);
   $pocet = count ($radky);
   if ($pocet > $max_radky)
      $kolik = $max_radky;
   else
      $kolik = $pocet;
   $radky = array_slice ($radky, 0, $kolik);
   while (list (, $hodnota) = each ($radky))
      echo "
$hodnota";
   $radky = array_reverse ($radky);
   reset ($radky);
   $klika = fopen($soubor, "w");
   while(list(, $hodnota) = each($radky))
      fputs ($klika, $hodnota, strlen ($hodnota));
   fclose ($klika);   
} // end func

?>

list.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title>WWW statistika</title>
<style type="text/css">
<!--
body {background-color:aliceblue; color:black;}
table {border:1px solid steelblue; border-collapse:collapse;}
td {background-color:ghostwhite; border:1px solid steelblue;}
th {background-color:lightsteelblue; border:1px solid steelblue;}
-->
</style>
</head>
<body>

<?php
$soubor = './data/logData.cgi';
$pocitadloDnes = "./data/pocitadloDnes.cgi";
$pocitadloVse = "./data/pocitadloVse.cgi";

$dnes = ziskejPocitadlo($pocitadloDnes);
$vse = ziskejPocitadlo($pocitadloVse);

echo "Návštìvy celkem $vse a dnes $dnes ";

if (!File_Exists ($soubor)) exit ("<p>Soubor $soubor nenalezen.</p>");
$obsahSouboru = file ($soubor);

while (list (,$radek) = each ($obsahSouboru))
   list ($pole_ip[], $pole_href[], $pole_rozl[], $pole_datum[], $pole_cas[], $pole_brow[], $pole_plat[], $pole_ref[]) = explode("|", $radek);

echo "<h2>WWW statistika</h2>";

tabulka ('Prohlížeè',$pole_brow,false);
tabulka ('Platforma',$pole_plat,false);
tabulka ('Rozlišení',$pole_rozl,false);
tabulka ('Vstupní stránka',$pole_href,'href');
tabulka ('Datum',$pole_datum,'datum');
tabulka ('IP adresa',$pole_ip,false);
tabulka ('Odkud návštìvníci pøišli',$pole_ref,'href');

////////////////////////// VYPSAT TABULKU
function tabulka ($napis,$pole,$format) {
   if (count($pole) < 1 ) {
      echo "<p>Statistka $napis neobsahuje žádné zápisy</p>";
      return;
   }
   natcasesort($pole);
   $i = 0;
   $save = '';
   echo '<p><table border="1" width="100%">';
   echo "<tr><th align='left' width='75%'>$napis</th><th align='left' width='25%'>Unikátní návštìvy</th>";
   
   while (list (,$v) = each ($pole)) {
      if ($format == 'datum')
         $v = substr($v,6,2) . '/' . substr($v,4,2) . '/' . substr($v,0,4);
      elseif ($format == 'href')
         $v = "<a target=\"_blank\" href=\"$v\">$v[/url]";
      if ($i > 0) {
         if ($save != $v) {
            echo "<tr><td>$save&nbsp;</td><td align='right'>$i</td></tr>";
            $i = 0;
            $save = $v;
         }
      }
      else
         $save = $v;
      $i++;
   }
   if ($i > 0)
      echo "<tr><td>$save&nbsp;</td><td align='right'>$i</td></tr>";
   echo '</table>';   
} // end func

/////////////////////////// ZÍSKEJ POSLEDNÍ HODNOTU POÈÍTADLA
function ziskejPocitadlo ($soubor) {
   $klika = fopen($soubor, 'r');
   if ($klika == false) exit("Nelze otevøít poèítadlo na vstup.");
   $data = fread($klika, filesize($soubor));
   fclose($klika);
   return $data;
} // end func

?>

</body>
</html>

Už jsem to zkoušel rozchodit ale domnívám se, že to do souborů ve složce DATA to vůbec nezapisuje.
Poznal jsem to velikosti souborů, selhávají mi i pokusy to nějak rozumně prohlédnout.

soubory ve složce DATA jsou tyto, datum.cgi ,  ipLog.cgi  ,  pocitadloDnes.cgi , pocitadloVse.cgi  ,  pocitadloVse.cgi

soubory  datum.cgi  ,  pocitadloDnes.cgi  ,   pocitadloVse.cgi   jsou ve Slaxu ikonami označeny jako txt

Možná s tím už někdo má zkušenosti. Nebo něčím snadnějším v JS.