Probleme mit fputcsv() / Besucherzähler
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfordern
array
besucher
code
datei
domain
fehler
http
index
item
lade
manual
ordner
probieren
programm
realisieren
stunden
url
zahl
zeitpunkt
-
Hallo,
seit Stunden bin ich am probieren und bekomme immer den selben Misst!
Ich möchte einen Besucherzähler über eine CSV Datei realisieren.
Ich lade die Zahlen aus der Datei in ein Array ([0]->1,[1]->2) (Bsp.)
Dann Zähle ich die Variable Plus 1.
Bis hierhin wird auch noch alles ordentlich angezeigt aber nun...
Nun will ich die neue Variable per fputcsv in die Datei zurück schreiben, aber er schreibt eine andere Zahl!
Bsp. Ich lade die 5, dann rechne ich +1 = 6 aber in die Datei wird 7 geschrieben! WARUM?
<?php $handle = fopen("items/modules/visitors/visitors.csv", "r"); $data = fgetcsv($handle, 200, ";"); fclose($handle); $data[0] ++; $handlea = fopen("items/modules/visitors/visitors.csv", "w"); fputcsv($handlea, $data, ";"); fclose($handlea); ?> <p>Besucher:</p> <p style='font-size: 10px;'>Heute: <?php echo $data[0]; ?></p> ...
Bitte helft mir, ich verzweifle!
MFG Micha -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
1) Warum als CSV, wenn sich doch serialize() und unserialize() in Verbindung mit file_get_contents() und file_put_contents() perfekt anbieten?
1) Hast du auch geschaut, welcher Wert aus der Datei gelesen wird und ob eventuell hier bereits ein Fehler liegt? -
Hey,
klar kann man es auch anders machen, aber ich will nun unbedingt herausfinden, warum er das nicht so schreibt wie er soll ... :)
Das Script liest definitiv die richtigen Daten aus der Datei (mit print_r kontrolliert) aber es schreibt nicht den richtigen Wert in die Datei, schreibe ich statt das Array die Daten mit "-Zeichen in die Funktion, schreibt er genau diese auch in die Datei, warum dann nicht die Richtigen aus dem Array? -
michaelkoepke schrieb:
Hallo,
seit Stunden bin ich am probieren und bekomme immer den selben Misst!
Ich möchte einen Besucherzähler über eine CSV Datei realisieren.
Ich lade die Zahlen aus der Datei in ein Array ([0]->1,[1]->2) (Bsp.)
Dann Zähle ich die Variable Plus 1.
Bis hierhin wird auch noch alles ordentlich angezeigt aber nun...
Nun will ich die neue Variable per fputcsv in die Datei zurück schreiben, aber er schreibt eine andere Zahl!
Bsp. Ich lade die 5, dann rechne ich +1 = 6 aber in die Datei wird 7 geschrieben! WARUM?
<?php $handle = fopen("items/modules/visitors/visitors.csv", "r"); $data = fgetcsv($handle, 200, ";"); fclose($handle); $data[0] ++; $handlea = fopen("items/modules/visitors/visitors.csv", "w"); fputcsv($handlea, $data, ";"); fclose($handlea); ?> <p>Besucher:</p> <p style='font-size: 10px;'>Heute: <?php echo $data[0]; ?></p> ...
Bitte helft mir, ich verzweifle!
MFG Micha
Heyho,
wie hackyourlife schon schrieb, mit .csv Dateien würde ich es dir auch nicht empfehlen, aber ok.
Weiterhin existiert ein Logikfehler im Script:
Angenommen zum Zeitpunkt x wird dein Script von Besucher A aufgerufen und bis zum $data[0]++; (Zeitpunkt y) ausgeführt. Zum Zeitpunkt y wird dein Script von Besucher B nochmal aufgerufen und es wird wieder bis $data[0]++; (Zeitpunkt z) ausgefhürt.
Erst nach dem Zeitpunkt z wird das von Besucher A und B aufgerufene Script zu Ende ausgeführt.
Dann verschwindet ein Besucher in deiner Statistik.
Gegenmaßnahmen: Schreibschutz auf die Datei bzw. einfach nur ein fopen Handle mit Schreib- und Leserechten anfordern, dadurch sollte sie automatisch gesperrt werden.
VG Lucas -
Hey,
danke für die Info, habe es geändert und auch mit einer normalen .txt Datei sowie fgets und fputs verwendet, jedoch das gleiche Ergebnis, in die Datei wird immer der Wert n+1 eingetragen, ich verstehe das nicht.
Ich lese den Wert X Bsp. 1
erhöhe diesen um 1 mit ++
und schriebe den neuen Wert in die Datei warum wird nun immer n+1 also in diesem Bsp. 3 statt 2 in die Datei geschrieben?
--------------------------------------------------------------------
Habe das Problem gefunden es war die .htaccess datei mit dem Inhalt
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ index.php/?id=$1 [QSA,L]
Kann ich diesen Fehler dennoch beheben,
weil ich gern statt /?id=name in der Adresszeile /Name stehen haben möchte.
Einer eine Idee?
Beitrag zuletzt geändert: 14.4.2014 19:29:35 von michaelkoepke -
lucas9991 schrieb:
Soviel ich weiß, wird die Datei deshalb nicht automatisch gesperrt. Wenn man sie aber mit flock() sperren möchte, darf man sie zum Lesen und Schreiben nur einmal öffnen - also mit Schreib- und Leserechten. Aber die Sperre muss man immernoch manuell setzen.
[...]
Gegenmaßnahmen: Schreibschutz auf die Datei bzw. einfach nur ein fopen Handle mit Schreib- und Leserechten anfordern, dadurch sollte sie automatisch gesperrt werden.
[...]
michaelkoepke schrieb:
[...]
Kann ich diesen Fehler dennoch beheben,
weil ich gern statt /?id=name in der Adresszeile /Name stehen haben möchte.
[...]
Die einfachste Möglichkeit ist, wie du schon geschrieben hast, eine Adresse wie:
http://domain.de/datei.php?id=xyz
(xyz steht für ein beliebiges Wort)
Benennst du die datei.php um zu index.php, kannst du es auch so aufrufen:
http://domain.de/?id=xyz
Mit dem entsprechenden PHP-Programm funktioniert auch so eine Adresse:
http://domain.de/?xyz
Beispiel: http://www.fuerderer.12hp.de/public/key.php?beliebigeswort
Hier noch das Programm dazu:
<?php echo "Das Stichwort ist ".key($_GET)."<br>"; echo 'Inhalt der Variable $_GET:<br>'; var_dump($_GET); ?>
Es steht jedoch immernoch das Fragezeichen drin.
Mit etwas mehr Aufwand funktioniert aber auch sowas:
http://domain.de/xyz
Dazu fallen mir gerade zwei Möglichkeiten ein:
A: Du erstellst für jeden Begriff einen eigenen Ordner (geht auch dynamisch, aber du musst vorher wissen, welche Ordner du brauchst)
B: Beim Aufruf sucht der Webserver den Ordner aber findet ihn nicht. Daraufhin wird ein 404-Error ausgelöst und mit der .htaccess gesteuert ein Error-Dokument aufgerufen. Dieses liest die Adresszeile aus und macht die Auswertung. -
Hey,
Problem gefunden! Es haben ein Paar /-Zeichen gefehlt.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ index.php/?id=$1 [QSA,L]
RewriteRule ^/(.*)$ /index.php/?id=$1 [QSA,L]
MFG Micha
Beitrag zuletzt geändert: 17.4.2014 19:55:12 von michaelkoepke -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage