Steuerung für "Mobile" vs. "Desktop"

Man kann die Unterscheidung für die Darstellung "Mobile" oder "Desktop" auf 2 Arten bewerkstelligen:
1) Eine eigene Seite für mobile Geräte mit Name mobile.php oder mobile.html
2) Unterschiedliche CSS im Sourcecode einbinden
Aber in beiden Fälle muss in der Desktop-Version die Steuerung eingebaut werden. In der Mobile-Version ist das nicht umbedingt notwendig.

   

Steuerung mit PHP

<?php	  
    // Globale Variablen einlesen. Hier werden alle im Code verwendeten Variablen eingerichtet
    require('datensammlung.php');
  
    // Wenn es Mobile ist weiterleiten. Das ist der Fall wenn im Useragent das Wort "Mobile" steht
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile')) 
    {
        echo   '<script type="text/javascript"> window.location = "' . $verzeichnis . 'mobile.php"; </script>';
    } 
?>	  
	  

Steuerung mit Java Script neue Seite laden

<script>		 
    if (navigator.userAgent.search("Mobile") > 0) window.location = "https://infoseca.ch/prg/LogTest/mobile.php";		
</script>
	  

Steuerung mit Java Script CSS Styleändern

Beispiel: Die Styles für den Desktop werden in "desktop.css" zusammengefasst und die für Mobile in "mobile.css".
<link rel="stylesheet" id="darstellung"  href="desktop.css" />
<script>
   if (navigator.userAgent.search("Mobile") > 0) document.getElementById("darstellung").href = "mobile.css";;   		
</script>	
	 

Counter einrichten - Klickzähler

Da der Zwischenstand gespeichert werden muss, geht das nur über PHP (JS lässt "schreiben" nicht zu)
 
<?php
   // um Fehlermeldungen zu vermeiden wird das Conterfile "counter.txt" initialisiert, ist aber nicht nötig
   if ( ! file_exists("counter.txt")) file_put_contents("counter.txt","0");
   $counterstand = intval(file_get_contents("counter.txt"));
   $counterstand++;  // hochzählen
   file_put_contents("counter.txt",$counterstand);
?>	
     

Mehrfachklicks vermeiden

Um mehrfach klicks zu vermeiden, kann mit PHP die Sender-IP-Adresse abgefragt werden und mit der zuletzt benutzten verglichen werden.
Da am selben Router mehrere User hängen könnten, sollte auch der Useragent benutzt werden.
Mit der Fehlerquote, dass mehrere User am selben Router auch den gleichen Useragent haben könnten, kann man gut leben.
Besser wäre diese Steuerung mit dem SessionsCookie zu prüfen, dies ist aber ziemlich aufwändig, schon nur weil in PHP Cookies nur beim Seitenstart geschrieben werden können.
	  	  
<?php
   // um Fehlermeldungen zu vermeiden wird das Speicherfile "ip.txt" initialisiert, ist aber nicht nötig
   if ( ! file_exists("ip.txt")) file_put_contents("ip.txt","Neu");
   $client_ip = $_SERVER['REMOTE_ADDR'];
   $client_ua = $_SERVER['HTTP_USER_AGENT'];
   $userAlt = file_get_contents("ip.txt");
   if($userAlt != $client_ip . $client_ua )
   {
       // Neuer Besuch. Somit darf gezält werden und der Besuch geloggt werden
       // *** Counter einrichten - Klickzähler ***
       // *** Besuch loggen ***
       file_put_contents("ip.txt", $client_ip . $client_ua);
   }
?> 
    

Logeinträge schreiben (Beispiel)

Man kann es halten wie man will, ich finde, dass die Informationen, die ich kennen will, genug sind.
Klicknummer, Datum, SenderIP, Useragent, evtl. aufrufende Seite, evtl. User, Gerät
<?php
   $logFile = "LogfileName.txt";
   file_put_contents($logFile, $counterstand . " * " . date("Y-m-d H:i:s") .  " * " .  $client_ip  .  " * "  . $_SERVER['HTTP_USER_AGENT'] . " * "  . $_SERVER['HTTP_REFERER'] .   " * "  . $_SERVER['REMOTE_USER'] . " * Desk\n", FILE_APPEND) ;
?> 	  
	  

Ganzer Code für "Desktop"

<?php
  // Globale Variablen einlesen. Hier werden alle im Code verwendeten Variablen eingerichtet
  require('datensammlung.php');
  
  // Wenn es Mobile ist weiterleiten. Das ist der Fall wenn im Useragent das Wort "Mobile" steht
  if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile'))
  {
    echo   '<script type="text/javascript"> window.location = "' . $verzeichnis . 'mobile.php"; </script>';
  } 
  // Da mit dem Aufruf von mobile.php der Ablauf nicht mehr zurückgegeben wird, kann hier auf else verzichtet werden
  $client_ip = $_SERVER['REMOTE_ADDR'];
  $client_ua = $_SERVER['HTTP_USER_AGENT'];
  $userAlt = file_get_contents("ip.txt");
  if($userAlt != $client_ip . $client_ua)
  {
    // Neuer Besuch. Somit darf gezählt werden und der Besuch geloggt werden
    // *** Klickzähler ***
    $counterstand = intval(file_get_contents("counter.txt"));
    $counterstand++;  // hochzählen
    file_put_contents("counter.txt",$counterstand);
	  
    // *** Besuch loggen ***
    file_put_contents($logFile, $counterstand . " * " . date("Y-m-d H:i:s") .  " * " .  $client_ip  .  " * "  . $_SERVER['HTTP_USER_AGENT'] . " * "  . $_SERVER['HTTP_REFERER'] .   " * "  . $_SERVER['REMOTE_USER'] . " * Desk\n", FILE_APPEND) ;
	  
    file_put_contents("ip.txt", $client_ip . $client_ua);
  }
?> 
	  

Logeinträge formatiert dargestellt

Letzter Eintrag wird als erster angezeigt.

Unformatiert dargestellt



Tabelle der Logeinträge-Darstellung erstellen

 
<table width=95% border=3>
<tr>
   <th width=6%>POS</th>
   <th width=10%>Datum<br>Zeit</th>
   <th width=10%  bgcolor='#55ff55'> User IP</th>
   <th width=40%>User Agent</th>
   <th width=20%>Herkunft Page</th>
   <th width=8%>User</th>
   <th width=6%>Typ</th> 
</tr> 	
<?php
   $file = file_get_contents(log.txt);
   $zeilen = explode("\n" ,$file);
   for ($i=count($zeilen);$i>=0; $i--)
   {
      $azeile = explode(" * " ,$zeilen[$i]); 
      if (trim($azeile[0])<>"")
      {
         echo "<tr valign=top>";
         for( $o = 0;$o <= 6; $o++) 
         {
            if($o==2)
            {
               // Spezielle Zelle für einfaches auffinden des URL-Ursprungs. Braucht einer JS-Funktion aufruf(string url)
               // Gefordert ist eigentlich nur der 'else' Abschnitt um die Zellen mit Werte zu füllen 
               echo " <td bgcolor='#99ff99' onclick='aufruf(\"$azeile[$o]\");'>  $azeile[$o] </td>";
            }
            else
            {
               echo " <td>".$azeile[$o]." </td>";
            }
         }
         echo "</tr>\n";
      }	
   }
?>
</table>