ERLEDIGT
JA
JA
ANTWORTEN
15
15
ZUGRIFFE
830
830
EMPFEHLEN
-
Hi,
ich habe versucht einen grafischen Counter in php zu realisieren, funktioniert auch soweit, nur zählt der Counter immer +2 anstatt +1?
z.b.
schreibe ich in counter.txt 0 und er gibt 1 aus, richtig soweit, aber in der counter datei steht 2!
Bei erneutem aufruf gibt er aber 3 aus und schreibt 4 in counter.txt.
Komme einfach nicht auf den Fehler.
Hier das Script:
Grüße und THX im VorausPHP-Code:<?php
/////////////////// Counter ///////////////////
$filename = "counter.txt";
$datafile = fopen($filename , "r");
$zahl = fgets($datafile, "50");
fclose($datafile);
$zahl = ++$zahl;
$datafile = fopen($filename , "w+");
flock($datafile, "2");
$null = fwrite($datafile, $zahl);
flock($datafile, "3");
fclose($datafile);
/////////////////// Bild malen ///////////////////
header ("Content-type: image/gif");
$mein_bild = ImageCreate (500, 20);
$white = ImageColorAllocate ($mein_bild, 0, 0, 0);
$gruen = ImageColorAllocate ($mein_bild, 50,148,0);
imagecolortransparent($mein_bild,$white);
imageFilledRectangle($mein_bild,20,20,280,130,$white);
ImageString ($mein_bild, 5, 2, 2, "Diese Seite wurde schon ". $zahl ." mal aufgerufen!", $gruen);
imagegif($mein_bild);
?>
-
07.05.06 16:22 #2
Probier es mal mit:
PHP-Code:<?php
# [...]
$zahl = $zahl++;
# [...]
?>KIDS Kinderbetreuungsdienst
Xing
"When you play the game of thrones, you win or you die. There is no middle ground."
by Cersei Lannister in "A Game Of Thrones"
-
Jetzt bleibt er irgendwie auf 2 hängen un zählt nicht mehr weiter......
Komisch.
greets
-
07.05.06 16:28 #4
- Registriert seit
- Aug 2005
- Beiträge
- 9
<?php
/////////////////// Counter ///////////////////
$filename = "counter.txt";
$datafile = fopen($filename , "r");
$zahl = fgets($datafile, "50");
fclose($datafile);
$zahl = ++$zahl;
$datafile = fopen($filename , "w+");
flock($datafile, "2");
$null = fwrite($datafile, $zahl);
flock($datafile, "3");
fclose($datafile);
echo $zahl;
?>
also bei mir klappt das alles. jedesmal wenn ich die seite neu lade erhöht sich die zahl um eins. noch ein hinweis: es ist egal ob $zahl++ oder ++$zahl.
welche php version hast du?
-
Hallo,
du musst entweder
$zahl = $zahl + 1;
oder
$zahl++;
nehmen.
Eine Mischung aus beidem gibt es nicht bzw. funktioniert nicht.
mfg
forstermGeändert von forsterm (07.05.06 um 16:33 Uhr)
Wie man Fragen richtig stellt
Wichtig: Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
__________________
.:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.
-
die 5.1.1 hab ich auf meinem server.
Witzigerweise funktioniert das:
Bei mir auch.PHP-Code:<?php
/////////////////// Counter ///////////////////
$filename = "counter.txt";
$datafile = fopen($filename , "r");
$zahl = fgets($datafile, "50");
fclose($datafile);
$zahl = ++$zahl;
$datafile = fopen($filename , "w+");
flock($datafile, "2");
$null = fwrite($datafile, $zahl);
flock($datafile, "3");
fclose($datafile);
echo $zahl;
?>Geändert von puckido (07.05.06 um 16:35 Uhr)
-
07.05.06 16:33 #7
- Registriert seit
- Aug 2005
- Beiträge
- 9
das kann ich jetzt leider nicht testen. ich habe hier bloß php4. aber wie gesagt: bei mir klappt das 1a.
-
mhh. mit php 4 geht der eigentliche counter bei mir auch, nur zählt er im bild trozdem +2 ?
-
Hallo,
stimmt, das ist wirklich komisch, so:
$zahl = $zahl++;
funktioniert es nicht, dafür aber so:
$zahl = ++$zahl;
und so:
$zahl++;
mfg
forstermWie man Fragen richtig stellt
Wichtig: Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
__________________
.:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.
-
Mit jeder Version selbes Spiel.
Zitat von forsterm
-
07.05.06 17:20 #11
Ich hab jetzt die Ausgabe nicht direkt gemacht (also header('Content-Type: image/png')), sondern das Bild gespeichert und dann mit echo() ausgegeben, dann funktionierts auch... Im Folgenden mal der Code:
PHP-Code:<?php
ob_start(); # Ausgabepuffer aktivieren
error_reporting(E_ALL); # Alle Meldungen anzeigen
$filename = 'counter.txt'; # Counterdatei
# Wenn Datei nicht existiert, neu anlegen und Counterstand auf 0 setzen
if(!file_exists($filename)){
$fp = fopen($filename, 'w+');
$i = 0; }
# Datei existiert, also Counterstand auslesen
else{
$fp = fopen($filename, 'r');
$i = fread($fp, filesize($filename)); }
fclose($fp); # Datei schließen
$i += 1; # Counterstand um eins erhöhen
#Bild erstellen
$cIMG = imageCreate (500, 20);
$white = imageColorAllocate ($cIMG, 0, 0, 0);
$green = imageColorAllocate ($cIMG, 50,148,0);
imageColorTransparent($cIMG,$white);
imageFilledRectangle($cIMG,20,20,280,130,$white);
imageString ($cIMG, 5, 2, 2, 'Diese Seite wurde schon '.$i.' mal aufgerufen!', $green);
imagePNG($cIMG, 'counter.png');
echo '<img src="counter.png" />';
$fp = fopen($filename , 'w'); # Datei zum schreiben öffnen und Inhalt löschen
flock($fp, LOCK_EX);
fwrite($fp, $i); # Neuen Counterstand eintragen
flock($fp, LOCK_UN);
fclose($fp); # Datei schließen
ob_end_flush(); # Ausgabepuffer an Browser senden
?>Geändert von mAu (07.05.06 um 17:27 Uhr)
Gruß mAu
──────────────────────────
Ich auf flickr
* Unformatierten Quellcode schaue ich mir _nicht_ an!
* Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
* Bitte die Netiquette beachten.
* Vergesst nicht, beantwortete Fragen als erledigt zu markieren!
-
Also so funktioniert es bei mir auch, nur möchte ich die counter.php direkt als Grafik einbinden (auf einer anderen Seite).
Komisch...
EDIT: So, auf Basis eines Download Scripts hier die unelegante Lösung:
Eingebunden werden kann es einfach per <img src="counter.php">.PHP-Code:<?php
/////////////////// Counter ///////////////////
$filename = 'counter.txt';
if(!file_exists($filename)){
$fp = fopen($filename, 'w+');
$i = 0; }
else{
$fp = fopen($filename, 'r');
$i = fread($fp, filesize($filename)); }
fclose($fp);
if($i == '')
$i = 0;
else
$i += 1;
$mein_bild = ImageCreate (500, 20);
$white = ImageColorAllocate ($mein_bild, 0, 0, 0);
$gruen = ImageColorAllocate ($mein_bild, 50,148,0);
imageColorTransparent($mein_bild,$white);
imageFilledRectangle($mein_bild,20,20,280,130,$white);
imageString ($mein_bild, 5, 2, 2, "Diese Seite wurde schon ".$i." mal aufgerufen!", $gruen);
imagegif($mein_bild, 'counter.gif');
$bild = "counter.gif";
if ((file_exists($bild)) && (is_readable($bild)))
{
$dlfile=fopen($bild,'r');
}
else
{
die('<p>Datei konnte nicht geöffnet werden.\n');
}
header('Content-Type: image/gif');
header('Content-Disposition: attachment; filename="'.$bild.'"');
// header('Content-Length: '.filesize($bild));
while (!feof($dlfile))
{
$bytes=1024;
if ($kbs>0)
{
$bytes*=$kbs;
}
echo fread($dlfile,$bytes);
flush();
if ((!feof($dlfile)) && ($kbs>0))
{
sleep(1);
}
}
fclose($dlfile);
$fp = fopen($filename , 'w');
flock($fp, LOCK_EX);
fwrite($fp, $i);
flock($fp, LOCK_UN);
fclose($fp);
?>
Zuerst wird die Grafik auf Platte geschrieben, dann geöffnet und an den Empfänger geschickt. Wird das Script direkt aufgerufen gibt es die Datei zum Download an.
Falls jemand noch eine elegantere Lösung hat bitte melden!
GreetsGeändert von puckido (07.05.06 um 17:43 Uhr)
-
07.05.06 17:34 #13
So, die idiotischste Lösung... Weil er sich ja immer um 2 erhöht, lasse ich $i einfach nur um 0,5 erhöhen und somit im Endeffekt um 1... Haha

PHP-Code:<?php
ob_start(); # Ausgabepuffer aktivieren
error_reporting(E_ALL); # Alle Meldungen anzeigen
header('Content-Type: image/png');
$filename = 'counter.txt'; # Counterdatei
# Wenn Datei nicht existiert, neu anlegen und Counterstand auf 0 setzen
if(!file_exists($filename)){
$fp = fopen($filename, 'w+');
$i = 0; }
# Datei existiert, also Counterstand auslesen
else{
$fp = fopen($filename, 'r');
$i = fread($fp, filesize($filename)); }
fclose($fp); # Datei schließen
#Bild erstellen
$cIMG = imageCreate (500, 20);
$white = imageColorAllocate ($cIMG, 0, 0, 0);
$green = imageColorAllocate ($cIMG, 50,148,0);
imageColorTransparent($cIMG,$white);
imageFilledRectangle($cIMG,20,20,280,130,$white);
imageString ($cIMG, 5, 2, 2, 'Diese Seite wurde schon '.ceil($i).' mal aufgerufen!', $green);
imagePNG($cIMG);
$i += 0.5; # Counterstand um 0.5 erhöhen (also im Endeffekt um 1, warum auch immer...)
$fp = fopen($filename , 'w'); # Datei zum schreiben öffnen und Inhalt löschen
flock($fp, LOCK_EX);
fwrite($fp, $i); # Neuen Counterstand eintragen
flock($fp, LOCK_UN);
fclose($fp); # Datei schließen
ob_end_flush(); # Ausgabepuffer an Browser senden
?>Geändert von mAu (07.05.06 um 17:41 Uhr)
Gruß mAu
──────────────────────────
Ich auf flickr
* Unformatierten Quellcode schaue ich mir _nicht_ an!
* Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
* Bitte die Netiquette beachten.
* Vergesst nicht, beantwortete Fragen als erledigt zu markieren!
-
LOL Funktioniert tatsächlich! Fettes Dankeschön!
greets
-
07.05.06 17:51 #15
Nur noch eine Sache. Mir ist aufgefallen, dass wenn man ganz schnell den Reload-Button drückt, sich der Counterstand manchmal nur um 0.5 erhöht, also pack mal $i in imageString in die ceil()-Funktion. Round() oder floor() geht auch. Dann hast du immer glatte Werte.
P.s: Markiere das Thema bitte noch als "Erledigt". Danke!Gruß mAu
──────────────────────────
Ich auf flickr
* Unformatierten Quellcode schaue ich mir _nicht_ an!
* Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
* Bitte die Netiquette beachten.
* Vergesst nicht, beantwortete Fragen als erledigt zu markieren!
Ähnliche Themen
-
Datum wird falsch ausgegeben bzw Jahrezahl zählt hoch
Von candys im Forum PHPAntworten: 6Letzter Beitrag: 06.11.10, 15:58 -
MySQL zählt bei mir falsch / falsche Zählabfrage
Von Veränderung im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 05.10.08, 18:29 -
Thunderbird zählt inbox Mails falsch?
Von BeaTBoxX im Forum Microsoft WindowsAntworten: 0Letzter Beitrag: 07.02.06, 13:14 -
Counter zählt nur bei direkt aufruf
Von masupil im Forum PHPAntworten: 1Letzter Beitrag: 15.01.06, 12:56 -
selbstgemachter counter zählt nicht!
Von vaporizer im Forum Flash PlattformAntworten: 1Letzter Beitrag: 22.12.03, 16:41





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren