• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] fwrite, fclose fehler abfangen.

Al-Pi

New member
Hallo zusammen,

um zu zählen wie oft eine Aktion ausgeführt wurde, habe ich folgende Script geschrieben. (ähnlich wie eine Hit zähler)

$sidCountDB
Code:
5322|26|11924

include Datei um die Aktion zu zählen
PHP:
<?php
//daten sammeln
//jede erfolgreiche aktion wird gezählt am ende des tages wird wird die anzahl auf gestern übertragen
	$today = date('d'); //heutige tag ermitteln
	$sidCounts = file_get_contents($sidCountDB);	//datenbank auslesen
	list($sidCount, $day, $yesterdayCount) = explode("|", $sidCounts); //werte trennen
	if ($day == $today) //prüfen ob es noch heute ist
	{
 			$sidCount = $sidCount +1; // auf counter 1 addieren und speichern
			$newSidCount = $sidCount.'|'.$today.'|'.$yesterdayCount;
			$handle = fopen($sidCountDB, "w");
 			fwrite($handle, $newSidCount);
 			fclose($handle);
	}
	else
	{
			$yesterdayCount = $sidCount; //gezählte hits wird auf gestern übertragen
		 	$sidCount = 1; //counter auf 1 gestellt und speichern
			$newSidCount = $sidCount.'|'.$today.'|'.$yesterdayCount;
			$handle = fopen($sidCountDB, "w");
 			fwrite($handle, $newSidCount);
 			fclose($handle);
	}
	
?>

Ausgabe auf mehreren Dokumenten
PHP:
//sidcounter lesen und ausgeben
	$sidCounts = file_get_contents($sidCountDB);	
	list($sidCountToday, $sidDay, $sidCountYesterday) = explode("|", $sidCounts);
echo .......

das Ganze funktioniert eigentlich wie gewollt, doch manschmal (in einer Woche 2 mal passiert) wird der Inhalt der Datenbank Datei ganz gelöscht.
Code:
1|26|

auf meinen Localen Rechener Xampp habe ich es nicht reproduzieren können,
beim Googlen im Internet habe ich irgendwo gelesen, wenn der Datei zum schreiben noch nicht mit fclose geschlossen wurde ein zweites mal zum schreiben geöffnet wird, könnte es sowas verursachen. ....
hmmm... wie könnte ich sowas abfangen?
 
hallo teldri,

danke für dein hinweis, ich habe mal testweise flock mit eingebaut, hoffe dass ich es richtig eingefügt habe und es dadurch kein Probleme mehr verursacht.

PHP:
<?php
	$today = date('d');
	$sidCounts = file_get_contents($sidCountDB);	
	list($sidCount, $day, $yesterdayCount) = explode("|", $sidCounts);
	if ($day == $today)
	{
 			$sidCount = $sidCount +1;
			$newSidCount = $sidCount.'|'.$today.'|'.$yesterdayCount;
			$handle = fopen($sidCountDB, "w");
			if (flock ($handle, LOCK_EX))
			{
 				fwrite($handle, $newSidCount);
				flock($handle, LOCK_UN);
			}
 			fclose($handle);
	}
	else
	{
			$yesterdayCount = $sidCount;
		 	$sidCount = 1;
			$newSidCount = $sidCount.'|'.$today.'|'.$yesterdayCount;
			$handle = fopen($sidCountDB, "w");
			if (flock ($handle, LOCK_EX))
			{
 				fwrite($handle, $newSidCount);
				flock($handle, LOCK_UN);
			}
 			fclose($handle);
	}	
?>

Probleme mit fwrite und fclose habe ich eigentlich nur bei Aufstoßzeiten wenn sehr viele Besucher gleichzeitig online sind ( über 500), dann merke ich auch dass der online counter verrückt spielt...
Eine Datenbank würde ich liebend gerne verwenden, damit hätte ich wahrscheinlich auch viel mehr Möglichkeiten.
Doch mir fehlt einfach die SQL Kenntnis und ich wüsste nicht wie ich jedesmal mein local Datenbank auf dem online Server übertrage.
 
einfach exportieren und wieder online importieren, mit mysql hast du auch hervorragende möglichkeiten das ganze auszuwerten, filtern, und Statistiken auszugeben, Solltest dich damit wirklich mal befassen. php ohne datenbank ist wie Luxemburg, du kommst immer schnell an die grenzen :D
 
hallo teldri,
danke für dein hinweis, ich habe mal testweise flock mit eingebaut, hoffe dass ich es richtig eingefügt habe und es dadurch kein Probleme mehr verursacht.

Soweit ich das beurteilen kann ist es richtig eingebaut :)

Kann mich TecEye nur anschließen. Es lohnt sich definitiv ein wenig Zeit zu investieren um dem Umgang mit SQL zu erlernen.
Die Synthax ist sehr simpel und schnell verstanden. Quasi jeder Hoster hat phpmyadmin für die mysql Datenbanken installiert.
Damit können die Datenbanken mit einer praktischen GUI angelegt, verwaltet, exportiert usw. werden.

Und bei Unklarheiten kannst du hier natürlich auch fragen...
 
Zurück
Oben