Hallo,
ich möchte mittels Session Werte in eine Datei schreiben. Klappt so weit auch.
Mehrer Werte sind Zähler - die pro Aufruf hochgezählt werden.
Nun ist es so das der Wert per Ausgabe stimmt, aber in der Datei ist der Wert immer 1+.
Hier mal das Skript
In der Index-Datei wird die Session inizialisiert:
PHP-Code:
$oSniffer = new ClientDaten ();
//session datei inizialiisren
session_save_path($_SERVER["DOCUMENT_ROOT"]."/session/");
session_set_save_handler(array($oSniffer,"open"), array($oSniffer,"close"), array($oSniffer,"read"), array($oSniffer,"write"), array($oSniffer,"destroy"), array($oSniffer,"gc"));
//session starten
session_start();
Dann rufe ich die Methoden/functionen zum Zählen auf
PHP-Code:
$oSniffer->fGetHit ();
$oSniffer->fGetHitproSite ();
Und ie Klasse sieht wie folgt aus
PHP-Code:
class ClientDaten
{
var $IP;
var $Client;
var $Host;
function clientdaten ()
{
$this->fGetIp();
$this->fGetClient();
$this->fGetHost ();
}
######################
öffnet das speichern der se
#########################
function open($save_path, $session_name)
{
global $sess_save_path;
$sess_save_path = $save_path;
return(true);
}
#######################
#schließt das speichern der session
##########################
function close()
{
return(true);
}
#######################
#liest die erstellt session-datei
################################################
function read($id)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
return (string) @file_get_contents($sess_file);
}
###############################################
#schreibt die session datei
################
function write($id, $sess_data)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "w")) {
$return = fwrite($fp, $sess_data);
fclose($fp);
return $return;
} else {
return(false);
}
}
#########################################
#zerstört die sessiondatei
##############################################
function destroy($id)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file));
}
###########################################
#setzt max time des lebens
###############################################
function gc($maxlifetime)
{
global $sess_save_path;
foreach (glob("$sess_save_path/sess_*") as $filename) {
if (filemtime($filename) + $maxlifetime < time()) {
@unlink($filename);
}
}
return true;
}
###############################################
#Holt IP Adress
##############################################
function fGetIp ()
{
$this->IP=$_SERVER["REMOTE_ADDR"];
}
###############################################
#zeigt clienten umgebung
###############################################
function fGetClient ()
{
$this->Client=$_SERVER["HTTP_USER_AGENT"];
}
###############################################
#holt den host header soweit vorhanden
###############################################
function fGetHost ()
{
$this->Host=$_SERVER["HTTP_HOST"];
}
###############################################
#Zählt gesamte Seitenaufrufe
###############################################
function fGetHit ()
{
$_SESSION["Hit"]=$this->fZaheler ($_SESSION["Hit"]);
}
###############################################
#zählen der aufrufe pro seiten und unterseiten
###############################################
function fGetHitproSite ()
{
if (true===is_array($_POST))
{
$this->fReadVar ($_POST);
}
if (true===is_array($_GET))
{
$this->fReadVar ($_GET);
}
}
###############################################
function fReadVar ($Var)
{
if (true===is_array($Var))
{
//entfernen aller key die nicht zu brauchen
unset ($Var["Stop_allSound"],$Var["flashLoad"],$Var["sendenServ"],$Var["sendenUnt"],$Var["sendenProj"],$Var["sendenProjHome"],$Var["SiteZ"]);
//prüfen ob unterpunkte entahlten
if (true===array_key_exists("umenueid",$Var) && false===empty($Var["umenueid"]))
{
$_SESSION["umenueid"."_".$Var["hmenueid"]."_".$Var["umenueid"]]=$this->fZaheler ($_SESSION["umenueid"."_".$Var["hmenueid"]."_".$Var["umenueid"]]);
//es kann nur einen geben entfernen
unset($Var["hmenueid"],$Var["umenueid"]);
}
//pruefen ob unterpunkte
if (true===array_key_exists("pmenueid",$Var) && false===empty($Var["pmenueid"]))
{
$_SESSION["pmenueid"."_".$Var["rmenueid"]."_".$Var["pmenueid"]."_".$Var["pumenueid"]]=$this->fZaheler ($_SESSION["pmenueid"."_".$Var["rmenueid"]."_".$Var["pmenueid"]."_".$Var["pumenueid"]]);
unset($Var["rmenueid"],$Var["pmenueid"],$Var["pumenueid"]);
}
//denrest ausgeben nur wenn was drinn
$VarZahl=count($Var);
if (true===is_array($Var) && false===empty($VarZahl))
{
foreach($Var as $keyName => $ValueVar)
{
if (false===empty($keyName) && false===empty($ValueVar))
{
$_SESSION[$keyName."_".$ValueVar]=$this->fZaheler ($_SESSION[$keyName."_".$ValueVar]);
}
}
}
}
}
##############################################
#zahlerfunction
##############################################
function fZaheler ($Session)
{
$hit=$Session;
if ($hit==0)
{
$hit=1;
}
else
{
$hit++;
}
return $hit;
}
}
Beim Aufruf wird dann z.B. überall über echo die richtige Zahl ausgegeben, aber in der Datei steht dann statt 1 eine 2.
Kann mir da jemand helfen?
Grüsse Kanti