counter
Chugworth
- php
<? $fn = "counter.txt"; if (file_exists($fn)) { $fp = fopen($fn, "r"); $zahl= fgets($fp,10); fclose($fp); } else
$zahl = 0; $zahl = $zahl + 1; echo "<b>$zahl Besucher seit dem 01.07.03";
$fp = fopen($fn, "w"); flock($fp,2); fputs($fp,$zahl); flock($fp,3); fclose($fp); ?>
So, mal bitte den Code überprüfen. Bleibt auf "1" stehen und zählt nicht weiter. Thx!
Hallo Chugworth,
So, mal bitte den Code überprüfen.
[] Insert Coin
if (file_exists($fn)) {}
else
$zahl = 0;
$zahl = $zahl + 1;
So, mal bitte ganz scharf nachdenken.
Grüße
Roland
hallo Chugworth,
So, mal bitte den Code überprüfen.
Hm. Du knallst da einfach mal nen bißchen Code hin und sagst dann "so, macht gefälligst mal ...". Ohne Anrede, ohne eine Bitte. Dieser Ton ist absolutistisch, so spricht Cäsar mit seinem für PHP zuständigen Sklaven, der zu erledigen hat, was Cäsar nicht kann.
Bleibt auf "1" stehen und zählt nicht weiter.
Kann "er" wegen
$zahl = 0;
$zahl = $zahl + 1;
auch nicht. Es wird ja auch nicht gezählt mit deinem Code.
Gib doch bitte an, was du denn zählen möchtest. Eventuell hilft es dir auch weiter, dich mit for zu beschäftigen, falls das nicht unter deiner Würde ist.
litterati te salutant, caesar!
Christoph S.
Hi Christoph,
Gib doch bitte an, was du denn zählen möchtest. Eventuell hilft es dir auch weiter, dich mit for zu beschäftigen, falls das nicht unter deiner Würde ist.
was soll denn eine for-Schleife in diesem Zusammenhang bewirken?
Gruß
Reiner
Hi,
was soll denn eine for-Schleife in diesem Zusammenhang bewirken?
Vielleicht lernt der Ursprungsposter beim Durchlauf einer for-next Schleife, wie man sich hier im Forum zu benehmen hat.
SCRN
Ich muss sagen, auf ein so unverschämtes Posting, wie das von Chugworth hätte ich nichtmal reagiert.
Ohh Gott schock
Tut mir echt echt wirklich leid, dass das so "absolutistisch" rüber kam... urgs
Das war keine Absicht. Habt ja sicherlich gemerkt, dass ich 1.mal hier bin und halt einfach nur den Text knapp fassen wollte. Bin 17 und naja, da redet man halt etwas salop *augenroll
Also, erstmal danke für die Antworten! Und nochmal ein SRY! War wirklich keine Absicht!
Ohh Gott *schock*
was hat der damit zu tun? ;-)
Tut mir echt echt wirklich leid, dass das so "absolutistisch" rüber kam... *urgs*
Ist gut, manche Leute sind etwas empfindlich.
Das war keine Absicht. Habt ja sicherlich gemerkt, dass ich 1.mal hier bin und halt einfach nur den Text knapp fassen wollte. Bin 17 und naja, da redet man halt etwas salop *augenroll
Wobei ich das nun nicht verstehe.
Wenn Du "schon" 17 bist, solltest Du - zumindest beim Umgang mit Unbekannten - Dir darüber mal drei Minuten einen Kopf machen!
Also, erstmal danke für die Antworten!
Und nochmal ein SRY! War wirklich keine Absicht!
Was bist Du? Ist das ansteckend? Oder ist das vielleicht eine fernöstliche Kampfsportart?
Naja, Du wirst sicher irgendwann 18...
Nur ein Tip: Gewöhn Dir das mit spätestens 19 ab. Wenn Du u.U. beruflich mit Kunden zu tun hast, dann "könnte es passieren", daß die keinen Ton von Dir verstehen (bzw. Verständnis aufbringen).
Gruß
Reiner
Also, erstmal danke für die Antworten!
Und nochmal ein SRY! War wirklich keine Absicht!Was bist Du?
ach, das sollte wohl "sorry" werden.
;-))
Gruß
Reiner
Lool, jo naja, jetzt ohne Ausverschämt zu werdn ;) ....
SRY = Sorry Sowas nennt man auch "Umgangssprache im I-net gg
Achja, und gg = grins grins
lol = laughing out loudly
usw. usw.
Diese "Sprache" steht sogar in Tafelwerken!! g
Naja, wie gesagt. Es tut mir leid, dass das so blöde rübakam.
hallo Reiner,
was soll denn eine for-Schleife in diesem Zusammenhang bewirken?
_eventuell_ zählt sie etwas. Sie muß nicht zwingend sein, das ist richtig. Ich habe an dem Codeschnipsel nichts gefunden, was gezählt werden soll, und im Text steht ja auch nichts dazu. Es gibt eine Datei "counter.txt", die auf ihre Existenz überprüft wird. Falls sie existiert, soll sie ausgelesen werden. Wie sie entsteht, und was drin steht, scheint zweitrangig. Aber genau das ist bei einem Counter das, was wesentlich ist. Unter Umständen wird sie gar nicht gebraucht.
Grüße aus Berlin
Christoph S.
Hello,
Bleibt auf "1" stehen und zählt nicht weiter.
Kann "er" wegen
$zahl = 0;
$zahl = $zahl + 1;
auch nicht. Es wird ja auch nicht gezählt mit deinem Code.
Das sehe ich anders https://forum.selfhtml.org/?t=105297&m=650799
Da aber selst Du als Coding-Profi das nicht überschaust, wie man[tm] Code formatiert, empfehle ich doch die Wiederaufnahme der Diskussion über sachgerechte Formatierung in Hochsprachen.
Oder schiele ich hier jetzt selber?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
Oder schiele ich hier jetzt selber?
du hast vollkommen Recht. Was man doch alles übersehen kann.
MfG Hopsel
Hi,
<?
<------------------------|
$fn = "counter.txt"; |
if (file_exists($fn)) |
{ |
$fp = fopen($fn, "r"); |
$zahl= fgets($fp,10); |
fclose($fp); |
} |
else |
|
$zahl = 0; ---------------
$zahl = $zahl + 1;
echo "<b>$zahl Besucher seit dem 01.07.03";$fp = fopen($fn, "w");
flock($fp,2);
fputs($fp,$zahl);
flock($fp,3);
fclose($fp);
?>
MfG Hopsel
Der Code müsste ungefähr so aussehen
$fn="counter.txt";
if(file_exists($fn){
$fp=fopen($fn,"r+");
$num=fgets($fp,10);
echo $num;
$num++;
fwrite($fp,$num);
fclose($fp);
}
Hello,
<?
$fn = "counter.txt";
if (file_exists($fn))
{
$fp = fopen($fn, "r");
$zahl= fgets($fp,10);
fclose($fp);
}
else
{
$zahl = 0;
}
$zahl = $zahl + 1;
echo "<b>$zahl Besucher seit dem 01.07.03";
$fp = fopen($fn, "w");
flock($fp,2);
fputs($fp,$zahl);
flock($fp,3);
fclose($fp);
?>
So, mal bitte den Code überprüfen. Bleibt auf "1" stehen und zählt nicht weiter.
So! Mal bitte die Debug-Zeilen zeigen und wo Du sie eingebaut hattest, um den Fehler zu finden. ;-))
Und Dein Locking ist falsch angelegt[1].
Zum Zwecke der Veränderung musst Du bereits VOR dem Lesen exclusiv sperren, das Handle behalten und dann mit demselben Handle wieder zurückschreiben. Erst dann die Datei wieder schließen und damit automatisch das Lock freigeben.
[1] Es gibt da eine Aussage von Eddi (to grip), dass das Mandatory Locking auf manchen Systemen überhaupt nicht funktioniert. Wenn wir die nötige Zeit finden, untersuchen wir das näher. Eddi hat schon einige Lösungen erarbeitet. Das ist aber Fortgeschrittenen-Stoff ;-)
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo,
<?
$fn = "counter.txt";if (file_exists($fn))
{
$fp = fopen($fn, "r");
$zahl= fgets($fp,10);
fclose($fp);
}
else
{
$zahl = 0;
}$zahl = $zahl + 1;
echo "<b>$zahl Besucher seit dem 01.07.03";$fp = fopen($fn, "w");
flock($fp,2);
fputs($fp,$zahl);
flock($fp,3);
fclose($fp);
?>
Den Code habe ich ein wenig abgewandelt getestet.
Der Code:
<?php
$fn = "counter.txt";
if (file_exists($fn))
{
$fp = fopen($fn, "r");
$zahl= fgets($fp,10);
fclose($fp);
}
else
{
$zahl = 0;
}
$zahl = $zahl + 1;
echo "<b>$zahl Besucher seit dem 01.07.03";
$zahl.="\n".serialize($_SERVER).
serialize($_SERVER).
serialize($_SERVER).
serialize($_SERVER).
serialize($_SERVER).
serialize($_SERVER).
serialize($_SERVER);
$fp = fopen($fn, "w");
flock($fp,2);
fputs($fp,$zahl);
flock($fp,3);
fclose($fp);
?>
Im Endeffekt wird $zahl in meinem Test auf eine Größe von 8979 Byte gebracht, um den eigentlichen Schreibprozess zu verlangsamen.
Das erschreckende Ergebnis nach einem Test mit dem servereigenen Tool "ab" ($ ./ab -n 50000 -c 10 http://test/semaphoren/test.php) in der Ausgabe am Browser danach:
<b>2898 Besucher seit dem 01.07.03
Selber Test wiederholt ergibt folgendes:
<b>10610 Besucher seit dem 01.07.03
Selbst bei einem erneutem Test ($ ./ab -n 50000 -c 2 http://test/semaphoren/test.php), wo der Server nicht durch MaxRequestsPerChild gezwungen war, neue Threads zu erstellen, ergab sich folgendes:
<b>1072 Besucher seit dem 01.07.03
Das Testsystem ist Linux mit Apache 2.0.53 und PHP 5.0.4 als Handler des Servers.
[1] Es gibt da eine Aussage von Eddi (to grip), dass das Mandatory Locking auf manchen Systemen überhaupt nicht funktioniert. Wenn wir die nötige Zeit finden, untersuchen wir das näher. Eddi hat schon einige Lösungen erarbeitet.
Die Lösung über Semaphoren scheint zu kranken, da noch die konkurierenden Zugriffe eingerechtet werden. Soweit das derzeit abklärbar war, ist ein Denkfehler dahingehend aufgetreten, daß wie bei Dir erst nach einem erfolgten Zugriff eine "Sperre" gesetzt wird. Der Code ist unter http://eddi.to-grip.de/PHP/semaphor/?0.0.1.php einsehbar und verständlich kommentiert.
Eine parallel erdachte, aber noch nicht in Code umgewandeltes, Idee, auf eben einem multi-threaded Server eine sichere Aufstellung von Zugriffen zu erstellen, die für Deine Zwecke -wie geschaffen- wäre, ist, wenn PHP als Handler läuft, dem Server entweder über apache_setenv() eine Variable, ähnlich wie mod_setenvif, oder eben gleich mit mod_setenvif zu setzen, mit der wie in http://httpd.apache.org/docs-2.0/mod/mod_log_config.html#customlog beschreiben eine gesonderte Logdatei geführt wird. Diese würde pro Request um ein byte erweitert. Die Zugriffe ließen sich mit filesize() ermittel. Ein täglicher Cornjob würde die Datei wieder auf 0 byte setzen und dessen Größe in einer anderen Datei mit Datum vermerken, sadaß nicht nach einem Monat die Datei im GB-Bereich wäre.
Das setzt aufgrund der notwendigen Konfigurationsdirektiven Schreibrecht auf die primäre Serverkonfigurationsdatei voraus.
Generell lohnt es sich mal beim Support eines Hosters anzurufen, wo für einen Kundenaccount die Logdateien abgelegt werden, weil man letztlich nur die Logdateien mittels PHP zu parsen braucht, um selben Effekt zu erziehlen, aber mit dem Unterschied, daß man die Arbeit des Aufzeichnens der Zugriffe nicht dopelt machen muß!
Gruß aus Berlin!
eddi