[Suche Hilfe] Dateien in einem bestimmten ordner zählen

Garfield7

Neuling
Thread Starter
Mitglied seit
03.11.2010
Beiträge
7
Hallo liebe Damen und Herren,
ich habe folgendes Problem, dass mein counter bei jedem besuch, egal ob der Besucher an diesem Tag schoneinmal die Homepage besucht hat oder nicht, hoch zählt.

Jetzt habe ich folgendes vor:
-> Counter1 erstellt beim 1. Besuch des Besuchers an diesem Tag eine Datei ([/besucher/"datum"/"IPadresse".txt] z.b. [/besucher/03.11.2010/87.170.241.165.txt])
-> Counter2 zählt die Dateien in diesem Ordner

= Es wird nur der 1. Besuch des Besuchers an diesem Tag gezählt
Soweit die Idee.
Nun zu meinem Problem:
-> Das script

Frage: Könntet ihr mir villeicht ein script geben, mit des es funktionieren könnte?

Ich hoffe ihr kapiert es :d

MfG Garfield7
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Naja, das is jetzt nicht das was ich wollte.

Kann mir da villeicht jemand anderes helfen?
 
wozu den Aufwand betreiben und das Rad neu erfinden?

Wozu der Aufwand mit der Log Datei?

Code:
Set Shell = WScript.CreateObject("WScript.Shell")
Set Parameter = WScript.Arguments

Set fso = CreateObject("Scripting.FileSystemObject")
set folder=fso.GetFolder(Parameter(0))
	
msgbox folder.files.count
 
so, ich habe mal einen code.
Wie kann ich den so schreiben, dass er keine dateien mehr erstellt, sondern einen Eintrag in die MySQL Datenbank macht?

Hier der Code:
<?php
$datum = date("d.m.Y");
$text = "Forumbesuche: "; // Dateiinhalt
$text2 = "0";
$dateiname = "besucher/" . $datum . "/" . $_SERVER["REMOTE_ADDR"] . ".inc.php";
// Datei öffnen,
// wenn nicht vorhanden dann wird die Datei erstellt.
$handler = fOpen($dateiname , "a+");
// Dateiinhalt in die Datei schreiben
fWrite($handler , $text , $text2 + 1);
fClose($handler); // Datei schließen
?>

<?php
$datum = date("d.m.Y");
$eintraege = glob("besucher/" . $datum . "/*.inc.php");
$anzahl = count($eintraege);
if($anzahl != 1){
echo $anzahl . " Besucher haben uns heute besucht.";
}else{
echo ($anzahl . " Besucher hat uns heute besucht.");
}
?>
 
PHP ist eher ungünstig. Da brauchst du extra ein PHP Server zum Ausführen.

Was stört dich an meinem Quellcode? Ist übrings VBS. Hab ich vorhin vergessen zu erwähnen.

Edit: Bei VBS würde die Sache mit MySQL dann so aussehen: ActiveVB - MySQL-Datenbanken

Könnte mein Quellcode dahingehend anpassen aber mangels MySQL kann ich ihn dann nicht mehr Testen.
 
Zuletzt bearbeitet:
Warum PHP?
Ich verwende PHP, weil ich noch neben dem Counter andere Funktionen laufen habe, die nur mit PHP gehen.
 
Zuletzt bearbeitet:
Achso jetzt verstehe ich erst was du willst. Ich hab das mit den Dateien erstmal nur so hingenommen und mich daher gefragt warum man mit PHP dann zählen sollte. Das ist irgendwo bekloppt aber nicht wegen PHP sondern wegen den Dateien.

Du kannst mit PHP die IP Adresse des Clients auslesen. Die schreibst du dir einfach in deine MySQL Datenbank zusammen mit einem Timestamp. Wenn die IP Adresse in der Tabelle schon vorhanden ist, wird der Aufruf nicht gezählt. Resultat: Jeder Besucher wird nur einmal gezählt solange er die gleiche IP Adresse hat.

Den Timestamp brauchst du um die Einträge nach einem Tag wieder zu löschen. Die IP Adresse ist ja nur zeitlich an einen Besucher gebunden und wird irgendwann einem anderen Besucher zugewiesen. Der soll ja wieder als neuer Besucher gezählt werden.
 
Achso jetzt verstehe ich erst was du willst. Ich hab das mit den Dateien erstmal nur so hingenommen und mich daher gefragt warum man mit PHP dann zählen sollte. Das ist irgendwo bekloppt aber nicht wegen PHP sondern wegen den Dateien.

Du kannst mit PHP die IP Adresse des Clients auslesen. Die schreibst du dir einfach in deine MySQL Datenbank zusammen mit einem Timestamp. Wenn die IP Adresse in der Tabelle schon vorhanden ist, wird der Aufruf nicht gezählt. Resultat: Jeder Besucher wird nur einmal gezählt solange er die gleiche IP Adresse hat.

Den Timestamp brauchst du um die Einträge nach einem Tag wieder zu löschen. Die IP Adresse ist ja nur zeitlich an einen Besucher gebunden und wird irgendwann einem anderen Besucher zugewiesen. Der soll ja wieder als neuer Besucher gezählt werden.

Genau, jetzt fehlt nur noch ein beispiel PHP code
 
Hi,

wenn ich das jetzt richtig verstand habe, dann hast du das mit "pro Benutzer eine Datei erstellen" über den Haufen geworfen, oder ?

Du willst jetzt bei jedem Aufruf in der DB nachschauen, ob die IP in den letzten 24h schon mal hier war oder nicht, wenn nicht, dann eintragen ?
Kurz in Pseudo-Code:
PHP:
mysql_connent(...);
mysql_select_db(...);
$abfragequery = mysql_query("SELECT * FROM iptabelle WHERE ip='".server remote addr."' AND time > '".time()-24*60*60."'";
$anzahl = mysql_num_rows(...);
if($anzahl == 0) {
// neuer Eintrag
myslq_query("Insert Into....");
} else {
// Besucher war schon auf der Seite oder es gab bei der Abfrage einen Fehler
}
Die jeweiligen Funktionen und die Parameter findest du mit Beispielen zu genüge auf PHP: php.net

Aber: Wozu der Aufwand ? Es gibt doch schon schon viel bessere Counter (Open Source), welche auch so Sachen wie z.B. Unterschiedliche Browser etc. berücksichtigen. Was ist z.B. mit mehreren Benutzern hinter einem Router / Studiennetzwerk / WLAN-HotSpot etc. ? Die erreichst du mit deiner Variante nicht.
Zum sich in PHP einlernen - ok, aber zum praktisch einsetzen ist deine Variante nicht wirklich tauglich ;)
Mfg.
 
Zuletzt bearbeitet:
Gut dann steuer ich mal die 2. Hälfte bei.

Code:
$ipadresse ="$REMOTE_ADDR";

Die Tabelle wird bei der Lösung von pointX allerdings etwas groß. Ich würde das etwas anders machen.

Code:
$abfragequery = mysql_query("DELETE FROM iptabelle WHERE time < '".time()-24*60*60."'";
$summe=$summe+mysql_affected_rows(...);

Ist dann nur die Frage wann man das macht. Danach richtet sich dann auch wann man die Einträge, die noch keine 24 Stunden alt sind, draufrechnet.
 
Hi,
Code:
$ipadresse ="$REMOTE_ADDR";
Funktioniert - je nach Serverkonfiguration - nicht und ist seit $_SERVER[] (ab PHP 4.x) veraltet. siehe php.net

Code:
$abfragequery = mysql_query("DELETE FROM iptabelle WHERE time < '".time()-24*60*60."'";
$summe=$summe+mysql_affected_rows(...);
Stimmt. Es müssen natürlich alle Datensätze von gestern gelöscht und diese Anzahl ausgewertet werden.
Da war mein Code natürlich falsch.

Aber wozu
PHP:
$summe=$summe+...
?

Was soll eigentlich nacher mit $summe gemacht werden ?
Für jeden Tag ein Logfile geschrieben werden, welches $summe speichert ? Für jeden Tag ein Eintrag mit $summe in eine weitere Tabelle ?
Das würde vorraussetzen, dass die Datei jeden Tag um 0:00 aufgerufen wird. Ansonsten werden irgendwann einmal die Datensätze der letzten paar tage gelöscht.

mMn alles sehr aufwendig und bringt nacher doch nichts.
Für einen wirklichen Einsatz würde ich zu fertigen Countern oder ganzen Analyse-Tools greifen.
Mfg.
 
Zuletzt bearbeitet:
Recht Herzlichen Dank pointX,
aber manche Dinge hatten auch gefehlt, die jetzt drinnen sind, aber es geht jetzt immer noch nicht.

Warum mache ich es auf diesen Weg:
-> Weil ich nicht so zeugs will, was "jeder" hat.

Hier mein code:
Code:
<?php
$abfragequery = mysql_query("SELECT * FROM besucher WHERE ip='.server remote addr.' AND time > '.time()-24*60*60.'");
$anzahl = count($abfragequery);
$result = mysql_query ($sqlkommando);
if($anzahl == 0) {
// neuer Eintrag
$sqlkommando = "INSERT INTO besucher (ip, time) VALUES ('server remote addr', '$time')";
mysql_query($sqlkommando) or die("Error: " . mysql_error());
echo 'Herzlich willkommen bei uns! <br>';
} else {
// Besucher war schon auf der Seite oder es gab bei der Abfrage einen Fehler
echo 'Schön dass du zu uns zurück gefunden hast! <br>';
}
if($anzahl != 1){
echo $anzahl . " Besucher haben uns heute besucht.";
}else{
echo ($anzahl . " Besucher hat uns heute besucht.");
}
?>
(Die Daten von der Datenbank sind schon über include eingefügt gewesen ;))

Villeicht kann einer von euch den Fehler finden.

Fehler:
-> Trägt keine IP ein
-> Trägt keine Zeit ein

MfG Garfield7
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh