pemibo
Anmeldungsdatum: 2. Juni 2006
Beiträge: 108
|
Hallo,
kann mir jemand sagen warum dieser Besucherzähler nicht geht? 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | <?php
$speicher="besuchernr.txt";
$besuchernr;
if(file_exists($speicher)){
$zaehler=fopen("besuchernr.txt","r");
$besuchernr=fgets($zaehler, 255);
fclose($zaehler);
$besuchernr++;
}
$zaehler=fopen("besuchernr.txt","w");
if($zaehler){
fputs($zaehler, $besuchernr);
flcose($zaehler);
}
echo "Seitenaufruf Nr. $besuchernr";
?>
|
Das Problem ist wohl, dass er die Variable $besuchernr nicht erhöht. Hab schon soviel rumprobiert. Vielen Dank schon mal
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
„Nicht gehen“ heißt was? Der Fehler, den Du nicht näher erläuterst, kann alle möglichen Gründe haben, angefangen von Fehlkonfigurationen im Server bis hin zu fehlenden Rechten für das Verzeichnis, in dem dieses Skript ausgeführt wird. Im Allgemeinen aber implementiert man Besucherzähler so nicht. Ganz abgesehen von allen möglichen Probleme, die es mit sich bringen kann, wenn man in das Dateisystem des Servers schreiben möchte, ist dieser Zähler vor allem broken by design, da das Lesen und Schreiben des Zählers nicht atomar geschieht.
|
pemibo
(Themenstarter)
Anmeldungsdatum: 2. Juni 2006
Beiträge: 108
|
Okay, dann will ichs mal ein bisschen weiter erläutern.
Der Code so wie er hier steht (übrigens aus einem Buch 😉 ) gibt mir immer nur die Zahl aus die ich in die Datei besuchernr.txt schreibe aber er erhöht sie nicht.
An der Stelle an der er die Besuchernummer erhöhen soll, ($besuchernr++😉 geschieht einfach nichts. Das ist mir sehr unverständlich. Auslesen tut er sie richtig. Danke
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
Das klingt stark nach einem Rechteproblem. Darf der Benutzer, unter welchem der Webserver läuft, diese Datei denn schreiben? Die Tatsache, dass der Quelltext aus einem Buch ist, macht ihn nicht besser, im Gegenteil, sie wirft ein äußerst schlechtes Licht auf das Buch. ☺ Ist das gesamte Buch von der Qualität dieses Quelltexts, dann ist es das Papier nicht wert, auf dem es gedruckt wurde. Die fehlende Atomarität ist ja nicht das einzige Problem. Die Fehlersuche gestaltet sich ja nichtzuletzt deswegen so schwer, weil dem Skript jedwede Art von Fehlerbehandlung fehlt. Deswegen erkennt es auch Probleme beim Schreiben nicht.
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21815
Wohnort: Lorchhausen im schönen Rheingau
|
Nebenbei hat Zeile 13 einen Fehler. Wenn es hier ein TYPO ist, kein Problem. Wenn es ein TYPO im Quellcode ist, fix das mal.
|
pemibo
(Themenstarter)
Anmeldungsdatum: 2. Juni 2006
Beiträge: 108
|
Ich glaube nicht, dass es am schreiben der Datei liegt. Wenn ich nämlich vor und nach dem $besuchernr++; den Wert mit print($besuchernr); ausgebe erhalte ich immer den selben Wert.
Also wird er ja gar ned erhöht oder?
Danke für die schnellen Antworten. PS: Ich glaub ich muss mir ein anderes Buch kaufen 😢
|
YEPHENAS
Anmeldungsdatum: 8. Juni 2009
Beiträge: 352
|
pemibo schrieb: Okay, dann will ichs mal ein bisschen weiter erläutern.
Der Code so wie er hier steht (übrigens aus einem Buch 😉 )
Au weia
gibt mir immer nur die Zahl aus die ich in die Datei besuchernr.txt schreibe aber er erhöht sie nicht. An der Stelle an der er die Besuchernummer erhöhen soll, ($besuchernr++😉 geschieht einfach nichts. Das ist mir sehr unverständlich. Auslesen tut er sie richtig.
Du inkrementierst einen String. PHP ist zwar schwach typisiert und konvertiert frei Schnauze zwischen Typen hin und her, aber sobald sich in dem String nach den Ziffern weitere Zeichen befinden (z.B. Leerzeichen oder ein Zeilenumbruch) wird der String nicht mehr in einen Integer umgewandelt und folglich nicht mehr inkrementiert.
|
YEPHENAS
Anmeldungsdatum: 8. Juni 2009
Beiträge: 352
|
Lunar schrieb: Im Allgemeinen aber implementiert man Besucherzähler so nicht. Ganz abgesehen von allen möglichen Probleme, die es mit sich bringen kann, wenn man in das Dateisystem des Servers schreiben möchte, ist dieser Zähler vor allem broken by design, da das Lesen und Schreiben des Zählers nicht atomar geschieht.
Für eine Personal Homepage, die zwei- bis dreimal im Jahr aufgerufen wird kein Problem.
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
@YEPHENAS: Es macht die Lösung nicht besser, wenn sie nur auf einer Seite ohne Besucher läuft ☺
|
pemibo
(Themenstarter)
Anmeldungsdatum: 2. Juni 2006
Beiträge: 108
|
Also das mit dem Leerzeichen oder Zeilenumbruch klingt zwar plausibel aber das scheint auch keine Lösung zu sein. Ich hab die Datei jetzt schon mehrmals mit gedit erstellt und immer nur eine einstellige Zahl hineingeschrieben. Ohne Leerzeichen oder Zeilenumbrüche. Wie kann ich denn da sichergehen, dass in der Datei sonst nichts gespeichert ist?
|
freebirth_one
Anmeldungsdatum: 19. Juli 2007
Beiträge: 5051
Wohnort: Mönchengladbach
|
Ich sag nur: debugausgaben
schrei mal nicht die Beuchernummer, sondern irgendwas in die Datei. Dann siehst du ob es klappt am besten wäre ein direkter Feedback innerhalb der Funktion, damit du immer sihest, was genau sich ändert
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
Du kannst sie auf dem Terminal mit od -c anzeigen. Das zeigt Dir, welche Zeichen enthalten sind.
|
pemibo
(Themenstarter)
Anmeldungsdatum: 2. Juni 2006
Beiträge: 108
|
pemibo@pemibo-desktop:~$ od -c /var/www/besuchernr.txt
0000000 1 \n
0000002 AHHHHHH 😀 Jetzt muss ich den Zeilenumbruch nur noch loswerden ☺
|
YEPHENAS
Anmeldungsdatum: 8. Juni 2009
Beiträge: 352
|
pemibo schrieb: pemibo@pemibo-desktop:~$ od -c /var/www/besuchernr.txt
0000000 1 \n
0000002 AHHHHHH 😀 Jetzt muss ich den Zeilenumbruch nur noch loswerden ☺
$besuchernr = (int) fgets(...);
|
pemibo
(Themenstarter)
Anmeldungsdatum: 2. Juni 2006
Beiträge: 108
|
Juhu, das hat geholfen ☺
Vielen Dank euch allen.
|