PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP Counter



Bermuda
15.07.2004, 01:32
Hi.
Ich habe einen PHP Couner.
Er besteht aus einer counter.php und im Ordner /images sind die Zahlen.
Im Ordner der counter.php ist auch noch eine count.txt Datei, die zählt wieviele Leute auf der Seite waren.
Die counter.php Datei ist einwandfrei und vorallem fehlerfrei.
Ich habe jedoch jetzt das Problem, dass ich den Counter nicht in die Website einfügen kann. Wenn ich direkt in den Browser meineseite.de/counter/counter.php eingebe erscheinen die Zalen und es wird auch alles gezählt und funktioniert einwandfrei.
Ich will den Counter jedoch auf meiner Seite (PHP4; CMS=e107)
einbauen.
Deshalb habe ich ein Custom Menü gemacht und als Text eingegeben:
<?php include "counter/counter.php"; ?>
Jedoch passiert auf der Seite absolut nichts. Es erscheint kein neues Fenster wo der Counter oder so drinnen ist.
Kann mir da jemand helfen?



Bermuda

dadie
15.07.2004, 01:37
ich glaube das heisst :

<?php include ( "counter/counter.php"); ?>

und nicht

<?php include "counter/counter.php"; ?>

so das müsste klappen.

ps.lies dir mal diese seite durch :

http://www.php-include.com/

Latency
15.07.2004, 01:38
Nun, entweder ist der Pfad falsch (vielleicht hast du einen Fehler gemacht bei der Relativen/Statischen Pfadangabe, oder deine Counter.php hat bei sich einen Fehler.

Dh. Wenn du die Counter.php aufrufst stimmt der Relative Pfad zur Counter.txt vielleicht, aber sobald du die counter.php in deine Index.php einfügst darfst du nicht mehr von der Position der Counter.php ausgehen, sondern musst in der Counter.php die Pfadangabe von Index.php eintippen.

(Ich hoffe es war verständlich, ansonsten kann ichs mit einem etwas umständlichen Beispiel erklären :rolleyes: )

mitaki
15.07.2004, 01:53
<?php include ( "counter/counter.php";) ?>

<?php include "counter/counter.php"; ?>Die Klammern sind bei allen include Befehlen optional. Hier hast du den Fehler gemacht, das Semikolon vor der abschließenden Klammer zu setzen, achte bitte darauf, fehlerfreien Code zu posten, da es für Neulinge sonst verwirrend werden kann.

Liegt deine Index Datei ebenfalls in meineadresse.de/ oder z.B. unter meineadresse.de/seite/

Wenn der Counter hier liegt,
meineadresse.de/counter/counter.php
meineadresse.de/counter/count.txt
aber der include von hier stammt,
meineadresse.de/seite/index.php
dann passiert beim einfügen der count.txt das:
include "meineadresse.de/seite/counter/count.txt";

Wenn du den include Pfad in der counter.php änderst (../counter/count.txt) sollte es funktionieren.
../ geht ein Verzeichniss zurück, versuche das bei dir anzupassen.

Hier wird man zu schnell geholfen für meine lahmen Finger^^

dadie
15.07.2004, 02:03
1, sorry bin halt auch ein kleiner Neuling in sachen php

2, wenn es mit php nicht geh willl nim einfach diesen code :

<?php

echo "
<iframe frameborder=\"0\" src=\"./counter.php\" width=\"0\" height=\"0\" marginheight=\"0\" marginwidth=\"0\">
</iframe>" ;

?>

das ist zwar ne unkonventionele Lösung aber sie MUSS funzen.
(ich hoffe dieses mal ist kien fehler drin)

Bermuda
15.07.2004, 02:40
Original geschrieben von mitaki
Die Klammern sind bei allen include Befehlen optional. Hier hast du den Fehler gemacht, das Semikolon vor der abschließenden Klammer zu setzen, achte bitte darauf, fehlerfreien Code zu posten, da es für Neulinge sonst verwirrend werden kann.

Liegt deine Index Datei ebenfalls in meineadresse.de/ oder z.B. unter meineadresse.de/seite/

Wenn der Counter hier liegt,
meineadresse.de/counter/counter.php
meineadresse.de/counter/count.txt
aber der include von hier stammt,
meineadresse.de/seite/index.php
dann passiert beim einfügen der count.txt das:
include "meineadresse.de/seite/counter/count.txt";

Wenn du den include Pfad in der counter.php änderst (../counter/count.txt) sollte es funktionieren.
../ geht ein Verzeichniss zurück, versuche das bei dir anzupassen.

Hier wird man zu schnell geholfen für meine lahmen Finger^^

Ich denke, was du geschrieben hast wird mir am meisten helfen.
Die anderen Sachen, funktionieren zwar auch, aber immer mit kleineren Fehlern oder einfach nicht schön, z.B das es einen weißen Hinergrund gibt und so etwas.

Zu deinem Vorschlag.
Also bei mir liegt die index.php unter meinedomain.de also meinedomain.de/index.php .
Die counter.php liegt unter meinedomain.de/counter/counter.php
was genau muss ich jetzt machen um den include Befehl nutzen zu können?
Btw. Hast du ICQ oder MSN?


Bermuda

dadie
15.07.2004, 02:48
<?php include ( "./counter/counter.php"); ?>

wenn die datei die drauf zugreiffen soll im oderner

deine domain.de ist.

Latency
15.07.2004, 02:49
Original geschrieben von Bermuda
Zu deinem Vorschlag.
Also bei mir liegt die index.php unter meinedomain.de also meinedomain.de/index.php .
Die counter.php liegt unter meinedomain.de/counter/counter.php
was genau muss ich jetzt machen um den include Befehl nutzen zu können?

Bermuda Es ist noch wichtig zu erfahren wo die Counter.txt liegt. Ich gehe jetzt einfach mal aus, dass diese sich im selben Ordner befindet wie Counter.php

Dann musst du in die Counter.php gehen und dort deinen fopen() suchen und den Pfad wie folgt anpassen.

fopen("counter/counter.txt",.....

Die Counter.php kannst du wie folgt in die Index.php einbinden:

<?php
include("counter/counter.php");
?>

Dann sollte eigentlich alles laufen :)

mitaki
15.07.2004, 02:54
dadies Code ist zwar richtig, aber vielleicht verstehst du es mit meinem Text wieder besser (nichts für ungut) ^^

Es sollte reichen den include Befehl in der counter.php (welche die count.txt included) hierauf zu ändern:

include "counter/count.txt";Die Änderungen für die fopen() Funktionen, wie Latency sie beschrieb gehören auch dazu, der Code stimmt auch.

Wenn noch Probleme auftreten sollten, dann gebe ich dir morgen meine ICQ Nummer.

Bermuda
15.07.2004, 04:02
So, also im Moment ist es immernoch wie folgt, dass die index.php unter domain.de/index.php ist.
Desweiteren editiere ich lieber nicht ide Index.php, da eigentlich der Counter über ein Custom Menü, das selber integriert wird.
Der Counter ist unter domain/counter/counter.php die count.txt ist unter domain/counter/count.txt die images unter domain/counter/images
So, dann poste ich jetzt einfach mal die counter.php
wenn ihr mir sagt, was ich ändern muss um die counter.php unter domain.de/ zu setzen, so dass ich den include Befehl benutzen kann wäre ich euch sehr dankbar.
Ich werde in roter Farbe einzeichnen, was ich denke verändert weden muss.

<?php
//path to the count.txt count storage file
$counter_file = "http://rpgxp.de/counter/count.txt oder counter/count.txt" "count.txt";
//open the file for reading
if(!($fp = fopen($counter_file , "r"))) die ("cannot open file");
//store the first 24 bytes of data from the file into $counter
$counter = (int)fread($fp, 24);
//close the file
fclose($fp);
//increment $counter by 1
$counter++;
//open the counter file for writing
$fp = fopen($counter_file , "w");
//write the new $counter value into the file
fwrite($fp, $counter);
//close the file
fclose($fp);
//number images are stored in the images directory
//and are numbered from 0.gif to 9.gif
//loop through the values of $counter and
//use the strlen function to check the length of $counter
for ($i = 0 ;$i < strlen($counter) ; $i++)
{
//the <img src> tag
$imgsrc = SubStr($counter,$i ,1);
echo "<a href=\"http://www.notathing.com/downloads.php\" target=\"_blank\"><http://rpgxp.de/counter/images> <img src=\"images/" . $imgsrc . ".gif\" border = \"0\"></a>";
}
?>

Latency
15.07.2004, 04:20
<?php
//path to the count.txt count storage file
$counter_file = "counter/count.txt";
//open the file for reading$i++)
.
.
.
//the <img src> tag
$imgsrc = SubStr($counter,$i ,1);
echo '<a href="http://www.notathing.com/downloads.php" target="_blank"><img src="counter/images/' . $imgsrc . '.gif" border = "0"></a>';
}
?> So sollte der Code eigentlich stimmen. Jedoch weiß ich nicht warum du <http://rpgxp.de/counter/images> mitten im Code stehen hast :confused:

Bermuda
15.07.2004, 04:30
Original geschrieben von Latency

<?php
//path to the count.txt count storage file
$counter_file = "counter/count.txt";
//open the file for reading$i++)
.
.
.
//the <img src> tag
$imgsrc = SubStr($counter,$i ,1);
echo '<a href="http://www.notathing.com/downloads.php" target="_blank"><img src="counter/images/' . $imgsrc . '.gif" border = "0"></a>';
}
?> So sollte der Code eigentlich stimmen. Jedoch weiß ich nicht warum du <http://rpgxp.de/counter/images> mitten im Code stehen hast :confused:
Okay...da blicke ich auch nicht durch und als ich den Code kopiert habe, die alte counter.php ersetzt habe und nach domain.de hingefügt hatte, und gestartet hatte kam auch gleich ein Fehler...
Kannst du nicht einfach meinen Code editieren?
Btw. Ist doch egal ob ich den vollen Pfad schreibe also http://rpgxp.de blablabla oder einfach /counter/images.
Kommt aufs gleiche raus...oder?


Bermuda

Latency
15.07.2004, 04:34
<?php
//path to the count.txt count storage file
$counter_file = "counter/count.txt";
//open the file for reading
if(!($fp = fopen($counter_file , "r"))) die ("cannot open file");
//store the first 24 bytes of data from the file into $counter
$counter = (int)fread($fp, 24);
//close the file
fclose($fp);
//increment $counter by 1
$counter++;
//open the counter file for writing
$fp = fopen($counter_file , "w");
//write the new $counter value into the file
fwrite($fp, $counter);
//close the file
fclose($fp);
//number images are stored in the images directory
//and are numbered from 0.gif to 9.gif
//loop through the values of $counter and
//use the strlen function to check the length of $counter
for ($i = 0 ;$i < strlen($counter) ; $i++)
{
//the <img src> tag
$imgsrc = SubStr($counter,$i ,1);
echo '<a href="http://www.notathing.com/downloads.php" target="_blank"><img src="counter/images/' . $imgsrc . '.gif" border="0"></a>';
}
?>

So sollte es nun laufen :)

Bermuda
15.07.2004, 04:50
Gut, vielen Dank.
Hat gut funmktioniert wenn ich es jetzt in den Browser eintippe.
Aber die include Funktion funktioniert, weshalb auch immer immernoch nicht.
Welchen include Befehl soll ich denn jetzt benutzen um den Counter anzuschauen. Nur mal als Info, dass du ihn dir auch mal anschauen kannst unter http://rpgxp.de/counter.php
Dieses muss ich jetzt irgendwie einfügen.



Bermuda

Latency
15.07.2004, 04:53
Original geschrieben von Bermuda
Gut, vielen Dank.
Hat gut funmktioniert wenn ich es jetzt in den Browser eintippe.
Aber die include Funktion funktioniert, weshalb auch immer immernoch nicht.
Welchen include Befehl soll ich denn jetzt benutzen um den Counter anzuschauen. Nur mal als Info, dass du ihn dir auch mal anschauen kannst unter http://rpgxp.de/counter.php
Dieses muss ich jetzt irgendwie einfügen.



Bermuda

Das Einfügen in die Index.php ist ein Kinderspiel. Einfach an irgend eine x-beliebige Stelle in der index.php folgenden Code schreiben:

<?php include("counter.php"); ?>

Vorraussetzung ist aber dass die Counter.php weiter unter diesem Link erreichbar bleibt: http://rpgxp.de/counter.php

Bermuda
15.07.2004, 04:58
Das habe ich schon verstanden, nur schau mal auf die Seite www.rpgxp.de dort gibt es einzelne Fenster, die habe ich alle, besodners auf der rechten Seite per Custom Menü gemacht.
Deshalb kann ich ja nicht irgendwo einfach <?php include("counter.php"); ?> dies eintragen.
Da ich es ja auch in so einem Fenster rechts unten haben will.
Btw. Es gibt da noch etwas, die Hauptseite eigentlich wo auch automatisch die Domain rpgxp.de hingeführt wird heit rpgxp.de/news.php und ist nicht die index.php Datei.
Die index.php Datei enthält diesen Code:

<?php
/*
+---------------------------------------------------------------+
| e107 website system
| /index.php
|
| ©Steve Dunstan 2001-2002
| http://e107.org
| jalist@e107.org
|
| Released under the terms and conditions of the
| GNU General Public License (http://gnu.org).
+---------------------------------------------------------------+
*/
require_once("class2.php");
if($pref['membersonly_enabled'] && !USER){
header("location: ".e_BASE."login.php");
exit;
}

if(!$pref['frontpage'] || $pref['frontpage_type'] == "splash"){
header("location: ".e_BASE."news.php");
exit;
}else if(is_numeric($pref['frontpage'])){
header("location: ".e_BASE."content.php?article.".$pref['frontpage'].".255");
exit;
}else if(eregi("http", $pref['frontpage'])){
header("location: ".e_BASE.$pref['frontpage']);
exit;
}else{
header("location: ".e_BASE.$pref['frontpage'].".php");
exit;
}
?>


Aber mehr ist da nciht.



Bermuda

Latency
15.07.2004, 05:05
Original geschrieben von Bermuda
Das habe ich schon verstanden, nur schau mal auf die Seite www.rpgxp.de dort gibt es einzelne Fenster, die habe ich alle, besodners auf der rechten Seite per Custom Menü gemacht.
Deshalb kann ich ja nicht irgendwo einfach <?php include("counter.php"); ?> dies eintragen.
Da ich es ja auch in so einem Fenster rechts unten haben will.



Bermuda Na das kann ja heiter werden....:rolleyes:
Lass mich raten, von der stammt keine Zeile Code auf der Seite? Warscheinlich hast du ein WPS oder CMS verwendet und damit die Seite zusammengeschustert.

Nun, das erschwert die ganze Sache etwas. Es ist sicherlich möglich die Templates so weit anzupassen den Counter irgendwo anzeigen zu lassen, und es sicherlich auch kein Beinbruch für jemanden der mit dem System vertraut ist, aber hier und jetzt kann ich dir nicht helfen, da solltest du dir lieber einen fähigen Programmierer für das Project besorgen, denn an solchen Sachen wirst du immer wieder scheiter. Auser du fängst an HTML, CSS, PHP usw. zu pauken. :)

Aber wenn du sagstest, dass du die anderen Menüs auch per Custom Menü angelegt hast dann müsste ein weiteres Menü doch auch möglich sein oder? Und als Inhalt dieses Menüs trägst du einfach den PHP Code von oben ein :)

Bermuda
15.07.2004, 05:10
Ich habe im ersten Post schon geschrieben, dass der Code nicht von mir stammt und ich ein cms von e107 benutze...warum sollte ich eins coden, wenn dass was die haben fast perfekt ist.
Mit HTML habe ich absolut keine Probleme, PHP kann ich nicht proggen aber Sachen um ändern.
Genau deshalb habe ich ja auch schon hermgeschaut in den einzelnen PHP Dateien, jedoch nirgends könnte ich den Befehl passend einbetten.
Ich werds jetzt warscheinlich doch per iframe machen müssen, anders gehts nicht, ich habe nämlich mal ein Custom Menü PHP Datei geöffnet, der Befehl wird halt nur als Text anerkannt und wird nicht ausgeführt. :rolleyes:
Naja, wenn dir noch etwas einfällt, kannst es ja posten.



Bermuda

Chocwise
15.07.2004, 06:54
Ok, dann pass mal op, wir versuchen was anderes. :D
Und zwar scheißen wir auf den Schnickschnack mit den externen Bildern die eingebunden werden und erzeugen mit PHP selbst ein Bild welches man auch als ganz gewöhnliches Bild handhaben kann.
Wenn dein Host nun also Image-Funktionen bietet (was auf einer Linuxkiste und PHP 4.3.1 gar nicht mal so unüblich ist), dürfte dies eine recht optimale Lösung für dich darstellen. ;)

Und zwar ersetz mal den Code in deiner counter.php-Datei durch diesen:

<?php
//path to the count.txt count storage file
$counter_file = "counter/count.txt";
//open the file for reading
if(!($fp = fopen($counter_file , "r"))) die ("cannot open file");
//store the first 24 bytes of data from the file into $counter
$counter = (int)fread($fp, 24);
//close the file
fclose($fp);
//increment $counter by 1
$counter++;
//open the counter file for writing
$fp = fopen($counter_file , "w");
//write the new $counter value into the file
fwrite($fp, $counter);
//close the file
fclose($fp);

// Grafik-Funktionen
$image = imagecreate(70, 13); // erzeugt das Basisbild

$trans = imagecolorallocate($image, 0xCC, 0xCC, 0xCC); // Transparenz definieren (für den Hintergrund)
$textcolor = imagecolorallocate($image, 192, 192, 192); // Textfarbe im RGB-Format(änderbar)
$transparent = imagecolortransparent($image, $trans); // Transparenz zuordnen

ImageString ($image, 3, 0, 0, "$counter", $textcolor); // den Counterstand in das Bild zeichnen

header('Content-type: image/png'); // Dem Browser sagen dass das hier ein Bild ist
header('Cache-Control: no-cache, must-revalidate'); // Der Browser solls nicht cachen
header('Pragma: no-cache');

imagepng($image); // Gibt das Bild als PNG-Grafik aus
imagedestroy($image); // löscht das Bild aus dem Datenpuffer

?>
Diese counter.php-Datei kannst du nun in deine Seite als Bilddatei einbinden. Einfach per <img src="counter.php" width="70" height="13">. Sonst nix. Kein zusätzlicher Include. Keine zusätzlichen 0-9.gif's mehr.

Ich hab dir den Code ausdokumentiert damit du verstehen kannst was Sache ist und ihn ggf. selbst für dich anpassen kannst. ;)

Hier zum Anschauen mit roter statt grauer Schrift:
http://www.squarenet.info/staff/chocwise/counter/counter.php

Look, funzt sogar hier im Forum. ;)

BTW: Das Dingen könnte noch eine Reloadsperre gebrauchen:

$counter = "counter/count.txt";
$zeitfenster = 600;
$zeit=time($zeit);
$update="1";

$fp = fopen("counter.txt","r");
$i=0;
while (feof($fp)==0) {
$line=chop(fgets($fp,260));
$i++;
$testarray[$i]=$line;
}

fclose($fp);
$diff = $zeit-$testarray[3];
if (($diff) >= $zeitfenster) { $update="0"; }
if ($testarray[2] != $REMOTE_ADDR or $update == "0") {
$ftp = @fopen($counter,"r+");
$count = (int)fgets($ftp,100);
$count++;
rewind($ftp);
fwrite($ftp,"$count\n$REMOTE_ADDR\n$zeit\n");
fclose($ftp);

// Grafik-Funktionen
$image = imagecreate(70, 13); // erzeugt das Basisbild

$trans = imagecolorallocate($image, 0xCC, 0xCC, 0xCC); // Transparenz definieren (für den Hintergrund)
$textcolor = imagecolorallocate($image, 192, 192, 192); // Textfarbe im RGB-Format(änderbar)
$transparent = imagecolortransparent($image, $trans); // Transparenz zuordnen

ImageString ($image, 3, 0, 0, "$counter", $textcolor); // den Counterstand in das Bild zeichnen

header('Content-type: image/png'); // Dem Browser sagen dass das hier ein Bild ist
header('Cache-Control: no-cache, must-revalidate'); // Der Browser solls nicht cachen
header('Pragma: no-cache');

imagepng($image); // Gibt das Bild als PNG-Grafik aus
imagedestroy($image); // löscht das Bild aus dem Datenpuffer

?>

Erzähl obs geklappt hat. ;)

Bermuda
15.07.2004, 17:22
:)
Endlich hats funktioniert!
Vielen Dank!
Was ich jetzt noch wissen muss ist, ob ich auch meine Zahlen dafür benutzen kann.
Oder ob ich die Zahlen auch größer machen kann.
Desweiteren müsstest du mir die Reloadsperre in den anderen einbauen, da ich es ja nicht in die news.php einbauen kann.
Oder wie sol ich es machen?



Gruß Bermuda

Chocwise
15.07.2004, 19:16
Original geschrieben von Bermuda
:)
Endlich hats funktioniert!
Vielen Dank!
Was ich jetzt noch wissen muss ist, ob ich auch meine Zahlen dafür benutzen kann.
Oder ob ich die Zahlen auch größer machen kann.
Desweiteren müsstest du mir die Reloadsperre in den anderen einbauen, da ich es ja nicht in die news.php einbauen kann.
Oder wie sol ich es machen?



Gruß Bermuda
Das Script mit der Reloadsperre kannst du verwenden wie es ist und einfach in deine counter.php setzen (nicht dazusetzen! Dadurch ersetzen. ;)), es sei denn ich hab'n PHP-Fehler irgendwo übersehen. ;)


Wegen eigene Grafiken im Counter:
Nuja, mit eigenen Digits (Zahlenbildern) arbeiten, wird da um einiges komplizierter werden. Zumal man bei der PHP-Version die dein Server installiert hat, nicht mehr mit .gif-Dateien arbeiten kann. PHP Versionen ab AFAIK 4.1.0 setzen komplett auf PNG. Außerdem wäre's mit jeder Menge Fummelei verbunden.

Die Schrift vergrößern geht hingegen sehr einfach.
Du musst nur 3 Stellen im Script ändern.
1.:
ImageString ($image, 3, 0, 0, "$counter", $textcolor);
Die "3" in dieser Funktion, ist die Schriftgröße. Sollte es dein Serversystem allerdings nicht anders anbieten, gehts nur bis Schriftgröße 5.
2.:
$image = imagecreate(70, 13);
Natürlich musst du auch noch die Basisbildgröße anpassen, sonst wird die vergrößerte Schrift nicht komplett dargestellt. Die "70" ist die Breite des Basisbildes, die 13 die Höhe. Ich hab 70 gewählt weil der Platz bei dieser Schriftgröße bis etwa 10.000.000 Visits reichen sollte. Mit relativ geringem Scriptingaufwand und Fummelei könnte man es sicherlich auch hinbekommen die Babsisbildgröße dynamisch erzeugen zu lassen indem man ausliest wie viele Stellen der Counterwert hat und den einzelnen Zahlen dann eine jeweilige Breite einräumt und diesen Wert dann mit der Anzahl der Digits multipliziert. Vielleicht liefer ich das Script noch nach wenn du es selbst nicht hinekommst. ;)
3.: <img src="counter.php" width="70" height="13"> die Dimensionen im IMG-Tag mitd em du den Cunter einbindest. Natürlich müsste man auf die width-Angabe im Falle des in 2.: beschriebenen Counterbildes, mit dynamischer Größe, verzichten.


Du könntest dich allerdings auch ein wenig in die Grafikfunktionen PHP's reinarbeiten und dann ggf. sogar andere Schriftarten verwenden. Allerdings kenn ich mich damit nicht aus, ich hab immer nur diese eine Schriftart verwendet weil ich etwas anderes nie brauchte.
Hier eine Gesamtübersicht der Grafikfunktionen:
http://de.php.net/manual/de/ref.image.php

Hier jene die ggf. von Interesse sein könnten in diesem Kontext:
http://de.php.net/manual/de/function.imagefttext.php
http://de.php.net/manual/de/function.imageloadfont.php <- Beonders interessant.
http://de.php.net/manual/de/function.imagepsencodefont.php
http://de.php.net/manual/de/function.imagepsextendfont.php
http://de.php.net/manual/de/function.imagepsloadfont.php
http://de.php.net/manual/de/function.imagepstext.php

Wenn du zu Erkenntnissen über die Verwendung anderer Fonts gekommen bist, wär ich sehr interssiert wenn du sie mit uns teilst. ;)

Bermuda
15.07.2004, 20:24
Ich habe es jetzt mal mit der Reloadsperre versucht.
Da muss irgendwo ein Fehler drinnen stecken.
Der Counter wird nämlich nicht angezeigt.

Was die images angeht, ich habe das nochmal überprüft und es werden immernoch *gif Dateien angezeigt.
Aber wenn ich die vorhandenen Digits einfach vergrößere reicht mir das aus!
Ich fänds nur noch toll wenn das mit der Reloadsperre auch noch funktionieren würde^^.


Gruß Bermuda

mitaki
15.07.2004, 20:35
Einen Fehler verursacht diese Zeile:
$zeit=time($zeit);time() hat keine Parameter,
$zeit = time();reicht also aus.

Dann konnte ich eventuell ja doch noch helfen :)

Bermuda
15.07.2004, 20:48
Erstmal danke.
Aber es sind trotzdem irgendwo noch Fehler drinnen, da es immernoch nicht funktioniert.
Hier ist nocheinmal der Code wie er jetzt ist:
<?php
$counter = "counter/count.txt";
$zeitfenster = 600;
$zeit = time();
$update="1";

$fp = fopen("counter.txt","r");
$i=0;
while (feof($fp)==0) {
$line=chop(fgets($fp,260));
$i++;
$testarray[$i]=$line;
}

fclose($fp);
$diff = $zeit-$testarray[3];
if (($diff) >= $zeitfenster) { $update="0"; }
if ($testarray[2] != $REMOTE_ADDR or $update == "0") {
$ftp = @fopen($counter,"r+");
$count = (int)fgets($ftp,100);
$count++;
rewind($ftp);
fwrite($ftp,"$count\n$REMOTE_ADDR\n$zeit\n");
fclose($ftp);

// Grafik-Funktionen
$image = imagecreate(70, 13); // erzeugt das Basisbild

$trans = imagecolorallocate($image, 0xCC, 0xCC, 0xCC); // Transparenz definieren (für den Hintergrund)
$textcolor = imagecolorallocate($image, 192, 192, 192); // Textfarbe im RGB-Format(änderbar)
$transparent = imagecolortransparent($image, $trans); // Transparenz zuordnen

ImageString ($image, 3, 0, 0, "$counter", $textcolor); // den Counterstand in das Bild zeichnen

header('Content-type: image/png'); // Dem Browser sagen dass das hier ein Bild ist
header('Cache-Control: no-cache, must-revalidate'); // Der Browser solls nicht cachen
header('Pragma: no-cache');

imagepng($image); // Gibt das Bild als PNG-Grafik aus
imagedestroy($image); // löscht das Bild aus dem Datenpuffer

?>

mitaki
15.07.2004, 21:14
Hier bitte:
<?php

$counter = "counter/count.txt";
$zeitfenster = 600;
$zeit = time();
$update="1";

$fp = fopen($counter,"r");
$i=0;
while (feof($fp)==0) {
$line=chop(fgets($fp,260));
$i++;
$testarray[$i]=$line;
}

fclose($fp);
$diff = $zeit-$testarray[3];
if (($diff) >= $zeitfenster) { $update="0"; }
$ftp = @fopen($counter,"r+");
$count = (int)fgets($ftp,100);
if ($testarray[2] != $_SERVER['REMOTE_ADDR'] or $update == "0") {
$count++;
}
rewind($ftp);
fwrite($ftp,$count . "\n" . $_SERVER['REMOTE_ADDR'] . "\n" . $zeit . "\n");
fclose($ftp);

// Grafik-Funktionen
$image = imagecreate(70, 13); // erzeugt das Basisbild

$trans = imagecolorallocate($image, 0xCC, 0xCC, 0xCC); // Transparenz definieren (für den Hintergrund)
$textcolor = imagecolorallocate($image, 192, 192, 192); // Textfarbe im RGB-Format(änderbar)
$transparent = imagecolortransparent($image, $trans); // Transparenz zuordnen

ImageString ($image, 3, 0, 0, "$count", $textcolor); // den Counterstand in das Bild zeichnen

header('Content-type: image/png'); // Dem Browser sagen dass das hier ein Bild ist
header('Cache-Control: no-cache, must-revalidate'); // Der Browser solls nicht cachen
header('Pragma: no-cache');

imagepng($image); // Gibt das Bild als PNG-Grafik aus
imagedestroy($image); // löscht das Bild aus dem Datenpuffer

?>
Es gab ein paar Leichtsinnsfehler, die wohl entstanden, weil Chocwise zu schnell tippte.^^

Nebenbei: Es wäre hilfreich, wenn du deinen Code zukünftig in [*CODE][*/CODE] oder [*PHP][*/PHP] Tags schreibst.

Chocwise
15.07.2004, 21:24
So, nu aba. :D Das hier ist jetzt garantiert die richtige Version:

<?php
$counterfile = "counter/count.txt";
$zeitfenster = 600;
$zeit = time();
$update="1";

$fp = fopen($counterfile,"r");
$i=0;
while (feof($fp)==0) {
$line=chop(fgets($fp,260));
$i++;
$testarray[$i]=$line;
}

fclose($fp);
$diff = $zeit-$testarray[3];
if (($diff) >= $zeitfenster) { $update="0"; }
if ($testarray[2] != $REMOTE_ADDR or $update == "0") {
$ftp = @fopen($counterfile,"r+");
$count = (int)fgets($ftp,100);
$count++;
rewind($ftp);
fwrite($ftp,"$count\n$REMOTE_ADDR\n$zeit\n");
fclose($ftp);
}
else {
$count="$testarray[1]";
}

// Grafik-Funktionen
$image = imagecreate(70, 13); // erzeugt das Basisbild

$trans = imagecolorallocate($image, 0xCC, 0xCC, 0xCC); // Transparenz definieren (für den Hintergrund)
$textcolor = imagecolorallocate($image, 192, 192, 192); // Textfarbe im RGB-Format(änderbar)
$transparent = imagecolortransparent($image, $trans); // Transparenz zuordnen

ImageString ($image, 3, 0, 0, "$count", $textcolor); // den Counterstand in das Bild zeichnen

header('Content-type: image/png'); // Dem Browser sagen dass das hier ein Bild ist
header('Cache-Control: no-cache, must-revalidate'); // Der Browser solls nicht cachen
header('Pragma: no-cache');

imagepng($image); // Gibt das Bild als PNG-Grafik aus
imagedestroy($image); // löscht das Bild aus dem Datenpuffer
?>

Habs eben selbst getestet. ;)

Das kommt davon wenn man den Code eben fix aus eine andere Page rauspuhlt und ihn sich zuvor nicht anschaut. :D

Bermuda
15.07.2004, 21:34
O. Gott.
Ich verstehe diesen ganzen Mist nicht.
Jetzt funktionierts schon wieder nicht.
Wenn ich jetzt mit diesem Code oder dem anderen, ohne Reloadsperre rpgxp.de/counter.php eintippe kommt immer dieser Fehler:

Warning: fgets(): supplied argument is not a valid stream resource in /www/htdocs/v116195/counter.php on line 20

Warning: rewind(): supplied argument is not a valid stream resource in /www/htdocs/v116195/counter.php on line 22

Warning: fwrite(): supplied argument is not a valid stream resource in /www/htdocs/v116195/counter.php on line 23

Warning: fclose(): supplied argument is not a valid stream resource in /www/htdocs/v116195/counter.php on line 24

Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/v116195/counter.php:20) in /www/htdocs/v116195/counter.php on line 39

Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/v116195/counter.php:20) in /www/htdocs/v116195/counter.php on line 40

Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/v116195/counter.php:20) in /www/htdocs/v116195/counter.php on line 41
‰PNG  IHDRF .ŠhPLTEÌÌÌÀÀÀ°ÚtRNS7áèðIDATxœc`À à¬8kYü¬?ø¬µ^ ¼ª~ËIEND®B`‚

Sagt mir bitte jetzt nocheinmal, was ich genau machen soll.
In welches Unterverzeichnis ich die count.txt Datei kopieren muss, und welche anderen Dateien ich alle noch brauche.
Danke!



Bermuda

mitaki
15.07.2004, 21:38
Der Code nimmt an, dass deine Verzeichnisstruktur wie folgt aussieht:

domain/counter.php
domain/counter/count.txt

EDIT von Chocwise:
Und denk an die Schreibrechte der count.txt (777).
Sorry, wollte dafür nicht extra'n Post machen. :D

Bermuda
15.07.2004, 22:34
Original geschrieben von mitaki
Der Code nimmt an, dass deine Verzeichnisstruktur wie folgt aussieht:

domain/counter.php
domain/counter/count.txt

EDIT von Chocwise:
Und denk an die Schreibrechte der count.txt (777).
Sorry, wollte dafür nicht extra'n Post machen. :D
......
Ich Idiot.
Da ich noch etwas anderes ausprobiert habe habe ich die Dateien ersetzt und vergessen den CHMOD zu verändern.
Jetzt funktioniert alles richtig!
Vielen Dank!
Btw. Wenn jemand Lust hat Admin zu werden bei rpgxp.de ich suche noch jemanden.

Edit: Wie ist das jetzt eigentlich, speichert der Counter die IP des Users und zählt deshalb nicht weiter oder wie funtktioniert dies?

Edit2: Nur die count.txt auf den CHMOD 777 setzen oder auch die counter.php ?



Gruß Bermuda

Chocwise
15.07.2004, 22:53
Original geschrieben von Bermuda
...
Btw. Wenn jemand Lust hat Admin zu werden bei rpgxp.de ich suche noch jemanden.

Edit: Wie ist das jetzt eigentlich, speichert der Counter die IP des Users und zählt deshalb nicht weiter oder wie funtktioniert dies?
...
*kratzambart* Noch woanders Admin sein?
Nee lassma, ich bin ja hier schon zu faul. :D


Der Counter mit Reloadsperre ist allerdings kein High-Performance-Counter mit Top-Features. :D Der bringt auch nicht mehr viel wenn man täglich 1000 oder mehr Unique's auf seiner Seite hat, denn er loggt immer nur jeweils eine IP. Kommt jemand anderer daher und lädt den Counter steht seine IP in den Logs und der User der zuvor drin stand wird bei seiner nächsten Aktion wieder gezählt.

Alles andere wäre weitaus komplexer und ich selbst zu faul soetwas zu programmieren. :D

Bermuda
15.07.2004, 23:13
Original geschrieben von Chocwise
*kratzambart* Noch woanders Admin sein?
Nee lassma, ich bin ja hier schon zu faul. :D


Der Counter mit Reloadsperre ist allerdings kein High-Performance-Counter mit Top-Features. :D Der bringt auch nicht mehr viel wenn man täglich 1000 oder mehr Unique's auf seiner Seite hat, denn er loggt immer nur jeweils eine IP. Kommt jemand anderer daher und lädt den Counter steht seine IP in den Logs und der User der zuvor drin stand wird bei seiner nächsten Aktion wieder gezählt.

Alles andere wäre weitaus komplexer und ich selbst zu faul soetwas zu programmieren. :D
Reich mir auch vollkommen, ist ja auch hauptsächlich für mich, so dass ich weiß wie es voran geht^^.
Und was ist jetzt mit der count.txt Datei, muss nur die CHMOD 777 haben oder auch die counter.php Datei? Wenn die IP in der Counter.php gespeichert wird muss er doch auch Chmod 777 haben oder?



Bermuda

mitaki
15.07.2004, 23:22
Nein, die counter.php speichert die Daten in der count.txt, daher muss nur diese les- und beschreibbar sein.

@Chocwise:
Ich sehe es als Geschenk zum 50. Post. ;)

Chocwise
15.07.2004, 23:23
Original geschrieben von Bermuda
Reich mir auch vollkommen, ist ja auch hauptsächlich für mich, so dass ich weiß wie es voran geht^^.
Und was ist jetzt mit der count.txt Datei, muss nur die CHMOD 777 haben oder auch die counter.php Datei? Wenn die IP in der Counter.php gespeichert wird muss er doch auch Chmod 777 haben oder?



Bermuda
Nee, schau mal in die count.txt rein die auf deinem Server liegt, dort steht der Counterstand, die zuletzt geloggte IP und ein Timestamp drin. ;)
die counter.php ist gewissermaßen das Textprogramm das Text in ein Dokument (count.txt) reinschreibt. Ist die Datei count.txt dann schreibgeschützt, kann das "Textprogramm" auch nicht hineinschreiben.
Mit dem chmod 777 hebst du den Schreibschutz auf.