Hallo zusammen,
ich lerne gerade etwas PHP und wollte mir nun einen Counter so als Übung zusammenstricken.
Dies ist der PHP Code
<?php
function counter() {
$name = "counter.txt"; $count = 0;
$datei = fopen($name, "r+");
if ($datei) {
flock($datei, LOCK_EX);
$count = fgets($datei, 10);
fseek($datei, 0);
echo ''.++$count.'';
fwrite($datei, $count);
fclose($datei);
}
else {
echo "Datei ist gesperrt";
}
}
?>
Das Problem: Der Couter zählt nicht hoch. Ich bekomme keinen PHP Fehler oder "Parse Error".
Der Inhalt der counter.txt wird angezeigt (habe ihn mal per Hand auf 1 gesetzt), aber der Wert in der Datei wird nicht erhöht.
Wo kann der Fehler liegen?
Homepage selbermachen 7.852 Themen, 35.619 Beiträge
Rechenoperationen innerhalb von Strings solltest Du umbedingt in Klammern setzten. Womöglich liegt es schon daran. Abgesehen davon: Wozu gibst Du überhaupt noch davor einen leeren String aus?
hi,
nein an der klammer liegt es nicht. auch mit klammer habe ich den selben effekt.
wo gebe ich denn einen leeren string aus?
ich sehe grad, dass der code nicht ganz korrekt hier angegeben ist. habe ein paar html tags nicht maskiert.
die echo zeile sieht korrekt so aus:
ich habe die echo zeile in meinem scropt korrigiert. sie sieht jetzt so aus
echo ++$count;
aber auch mit klammer klappt es nicht.
echo (++$count);
Nimm mal "count++".
Ausserdem setzt du bei jedem Funktionsaufruf den Counter ja wieder auf 0 ...
HTH, Z.
<?php
function counter() {
$name = "counter.txt";
$datei = fopen($name, "r+");
if ($datei) {
flock($datei, LOCK_EX);
$count = fgets($datei, 10);
fseek($datei, 0);
$count++;
fwrite($datei, $count);
fclose($datei);
}
else {
$count = "Datei ist gesperrt";
}
return ($count);
}
?>
Getestet und geht ...
HTH, Z.
Yoo , passt nicht ganz, aber 'nen Counter proggen - wozu ?
Das Rad wurde bereits erfunden: Am einfachsten: http://www.knut-hilft.de/zaehler.php
MFG
Vielleicht weil nicht jeder davon abhängig sein will, dass externe Dienste sauber funktionieren?
Wer garantiert mir denn, dass das Ding auf meinem Webspace nur das macht, was es sagt?
Vielleicht will der Hausmeister ja auch einfach mal PHP lernen ...
HTH, Z.
Korrekt @Zaphod, die letzte Zeile lass ich gelten. aber sonst ...
MFG
Ist ja nett von dir, dass du Zaphods letzte Zeile gelten lässt - aber schau doch mal, was der Hausmeister gleich in seiner ersten(!) Zeile geschrieben hat:
ich lerne gerade etwas PHP und wollte mir nun einen Counter so als Übung zusammenstricken.
Noch Fragen?
CU
Olaf
Jaja Olaf19 - Du bist mein G-Wissen !
Ist korrekt.
MFG
nabend zusammen. der counter funktioniert jetzt. sogar mit meinem ursprünglichen code.
der fehler schien was mit den schreibrechten auf die textdatei zu tun haben.
ich habe die sache auf meinem linuxrechner unter meinem normalen benutzer erstellt.
habe normal eine datei angelegt mit der endung "counter.txt".
hat nicht geklappt.
nun habe ich die datei mal mit windows geöffnet. mal den dort eingetragenen wert gelöscht und neu geschrieben und dann die
datei wieder gespeichert.
plötzlich zählt der counter.
wieso hab ich unter linux scheinbar keine schreibrechte auf eine datei, die ich selber angelegt habe?
verstehen tu ich das ganze nicht.
Du hast, der Webserverprozess allerdings nicht. Typischerweise läuft der unter einem eigenen Benutzerkonto - das ist auch sinnvoll ;-)
öhm ja... das leuchtet ein. klar :)
welche rechte bräuchte denn dann die datei, wenn der webserver nicht bei mir, sondern bei meinem provider läuft?
oder muss ich den zugriff auf die datei für alles und jeden erlauben?
Das sollte man niemals tun ;-).
Entweder nimmst du deinen Arbeitsbenutzer in die Web-Gruppe mit rein, dann gibst du der Gruppe Schreibrechte.
Oder - und das ist die saubere Lösung - du übereignest die Gruppe dem Web-Eigentümer. Bei Debian heisst der www-data.
Das geht auch, in dem du die Datei von einem PHP-Script anlegen lässt, dann erbt sie die Rechte vom erzeugenden Script ...
HTH, Z.
stimmt, klingt logisch.
ne wunderbar, dann such ich mir mal den php befehl raus, und dann werd ich prüfen ob datei vorhanden. wenn nicht, soll die datei direkt angelegt werden.so müsste dann ruhe sein.
danke