Einfaches PHP Counter-Script gibt laufzeitüberschreitung aus ?
Warum sorgen einfache Aditionen bei meinem PHP-Script für Fehlermelungungen,
und eine schleife zum Dateiauslesen überschreitet die Laufzeit
Hallo Koleggen,
nun, wenn ich schreibe, muss mein Problem schon tiefer liegen.
Ich habe mir einen PHP-Besucherzähler gebaut, der einfach nur die Absolut
Besucher zählen soll, dazu gibt es eine .txt datei für Besucherzahl,
und eine für die besuchenden IP's.
Wiedererkannt werden besucher mittels Cookie.
eigentlich nichts komplitziertes und Rechenaufwändiges, aber mein Script
bricht iwie immer mit Laufzeitüberschreitung ab.
ich habe schon alles versuch und das Script sogar schon 7 mal Neugeschrieben, und wollte es schon aufgeben.
Vieleicht könnt ihr mir helfen
mkrasselt1
Hier jetzt die Fehlermeldungen und das Script:
Script---------
Fehlermeldung bei diesem Script-------------------
Warning: Cannot modify header information - headers already sent by (output started at E:\xampp\htdocs\counter.php:5) in E:\xampp\htdocs\counter.php on line 7
Warning: Cannot modify header information - headers already sent by (output started at E:\xampp\htdocs\counter.php:5) in E:\xampp\htdocs\counter.php on line 20
Fatal error: Maximum execution time of 60 seconds exceeded in E:\xampp\htdocs\counter.php on line 27
und eine schleife zum Dateiauslesen überschreitet die Laufzeit
Hallo Koleggen,
nun, wenn ich schreibe, muss mein Problem schon tiefer liegen.
Ich habe mir einen PHP-Besucherzähler gebaut, der einfach nur die Absolut
Besucher zählen soll, dazu gibt es eine .txt datei für Besucherzahl,
und eine für die besuchenden IP's.
Wiedererkannt werden besucher mittels Cookie.
eigentlich nichts komplitziertes und Rechenaufwändiges, aber mein Script
bricht iwie immer mit Laufzeitüberschreitung ab.
ich habe schon alles versuch und das Script sogar schon 7 mal Neugeschrieben, und wollte es schon aufgeben.
Vieleicht könnt ihr mir helfen
mkrasselt1
Hier jetzt die Fehlermeldungen und das Script:
Script---------
<html>
<head>
<title>Counter</title>
</head>
<body><?php
error_reporting(E_ALL);
if(!isset($_COOKIE['besucher'])){setcookie("besucher","0",time()+(3600*24));}
if(isset($_COOKIE['besucher']) and $_COOKIE['besucher'] == 1){
$count = fopen("./besucher.txt", "r");
if($count){}
while(!feof($count)){
if(!isset($besucher)){
$besucher = fgets($count);
}
}
fclose($count);
echo "$besucher";
}
else{
setcookie("besucher","0",time()+(3600*24));
$ip = $_SERVER['REMOTE_ADDR'];
$found = false;
$iplog = fopen("./iplog.txt", "a");
if($iplog){}
while(!feof($iplog)){
$ips = fgets($iplog);
$ips = substr($ips,0,-1);
if($ips == $ip){$found = true;}
}
if($found == false){
fwrite($iplog, $ip."\n");
}
fclose($iplog);
$count = fopen("./besucher.txt", "w+");
if($count){}
while(!feof($count)){
$besucher = fgets($count);
}
fwrite($count, $besucher);
fclose($count);
echo "$besucher";
}
?>
</body>
</html>
Warning: Cannot modify header information - headers already sent by (output started at E:\xampp\htdocs\counter.php:5) in E:\xampp\htdocs\counter.php on line 7
Warning: Cannot modify header information - headers already sent by (output started at E:\xampp\htdocs\counter.php:5) in E:\xampp\htdocs\counter.php on line 20
Fatal error: Maximum execution time of 60 seconds exceeded in E:\xampp\htdocs\counter.php on line 27
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 134978
Url: https://administrator.de/forum/einfaches-php-counter-script-gibt-laufzeitueberschreitung-aus-134978.html
Ausgedruckt am: 23.12.2024 um 00:12 Uhr
6 Kommentare
Neuester Kommentar
Moin.
Das error_reporting(E_ALL); muss als erste Zeile, also vor irgendwelchen Ausgaben kommen.
Durch die Deine Schleiferei durch Dateien wird das vermutlich sehr langsam. Du solltest das mit einer
Datenbank (z.B. MySQL) machen und einen Timestamp aufnehmen und alles älter als ein Tag rausschmeissen.
Dann gucken, ob die IP noch vorhanden ist und wenn nicht sie hinzufügen und den letzten Wert für Counter dabei um eins erhöhen...
Dann haut das in akzeptabler Zeit hin.
HTH
MK
Das error_reporting(E_ALL); muss als erste Zeile, also vor irgendwelchen Ausgaben kommen.
Durch die Deine Schleiferei durch Dateien wird das vermutlich sehr langsam. Du solltest das mit einer
Datenbank (z.B. MySQL) machen und einen Timestamp aufnehmen und alles älter als ein Tag rausschmeissen.
Dann gucken, ob die IP noch vorhanden ist und wenn nicht sie hinzufügen und den letzten Wert für Counter dabei um eins erhöhen...
Dann haut das in akzeptabler Zeit hin.
HTH
MK
Sind geil solche Kommentare oder ?
Beschäftigen sich kein Stück mit dem gestelltem Problem, raten aber zu allem möglichem...
@thaenhusen: Nicht böse sein Jemanden auf (möglicherweise) bessere/schnellere oder was auch immer für Möglichkeiten hinzuweisen ist ja definitiv keine verkehrte Sache, im Gegenteil !
Aber man kann nie genau wissen warum der Gegenüber sich gerade für diesen Weg entschieden hat. Vielleicht bietet der Webspace keine Datenbank an oder man möchte auch einfach zuhause Weiterwerkeln ohne sich den DB-Server noch installieren zu müssen obwohl man keine Ahnung hat ect. pp.
Lernen kann man alles, das ist klar aber nicht alles auf einmal und so fängt man eben auch klein an, anstelle eines "riesigen" SQL-Servers einfach eine kleine Datei fertig aus und punkt.
Was ich eigentlich sagen wollte.
Drängt dem Hilfesuchenden nicht in eure Wege, __helft ihnen ihren eigenen Weg zu bestreiten__ und wenn ihr möchtet, erzählt ihnen von eurem Weg.
(Wow, ich bin begeistert von mir)
@mkrasselt1:
Das Problem ist der Modus in dem du die Datei öffnest !
__Zeile 24:__
So wird die Datei mit dem "Zeiger" am Ende der Datei geöffnet, so kann schon mal nichts mehr aus der Datei gelesen werden weil der Zeiger sich bereits am Ende der Datei befindet.
Dadurch (das weiss ich jetzt nicht genau) kommt es scheinbar mit feof() zu dem Problem das das Ende nicht erkannt wird. Ich vermute das es daran liegt weil die Datei zum lesen UND schreiben geöffnet wurde und es somit kein richtiges Ende der Datei gibt da diese gerade ohne Beschränkung erweitert / beschrieben werden kann.
Verwende anstelle von "a" das "r" aber vergiss nicht das du später noch etwas in die Datei schreiben möchtest, diese dann aber aktuelle nur zum lesen geöffnet ist !
Für das auslesen der "besucher.txt"-Datei schau dir mal file_get_contents() an.
Rücke den Text um eine bestimme anzahl ein z.B. 4 Leerzeichen, das ist sehr gebräuchlich, sieht einheitlicher und sauberer aus und ist zudem besser lesbar.
~Arano
Beschäftigen sich kein Stück mit dem gestelltem Problem, raten aber zu allem möglichem...
@thaenhusen: Nicht böse sein Jemanden auf (möglicherweise) bessere/schnellere oder was auch immer für Möglichkeiten hinzuweisen ist ja definitiv keine verkehrte Sache, im Gegenteil !
Aber man kann nie genau wissen warum der Gegenüber sich gerade für diesen Weg entschieden hat. Vielleicht bietet der Webspace keine Datenbank an oder man möchte auch einfach zuhause Weiterwerkeln ohne sich den DB-Server noch installieren zu müssen obwohl man keine Ahnung hat ect. pp.
Lernen kann man alles, das ist klar aber nicht alles auf einmal und so fängt man eben auch klein an, anstelle eines "riesigen" SQL-Servers einfach eine kleine Datei fertig aus und punkt.
Was ich eigentlich sagen wollte.
Drängt dem Hilfesuchenden nicht in eure Wege, __helft ihnen ihren eigenen Weg zu bestreiten__ und wenn ihr möchtet, erzählt ihnen von eurem Weg.
(Wow, ich bin begeistert von mir)
@mkrasselt1:
Das Problem ist der Modus in dem du die Datei öffnest !
__Zeile 24:__
24.$iplog = fopen("./iplog.txt", "a");
Dadurch (das weiss ich jetzt nicht genau) kommt es scheinbar mit feof() zu dem Problem das das Ende nicht erkannt wird. Ich vermute das es daran liegt weil die Datei zum lesen UND schreiben geöffnet wurde und es somit kein richtiges Ende der Datei gibt da diese gerade ohne Beschränkung erweitert / beschrieben werden kann.
Verwende anstelle von "a" das "r" aber vergiss nicht das du später noch etwas in die Datei schreiben möchtest, diese dann aber aktuelle nur zum lesen geöffnet ist !
Für das auslesen der "besucher.txt"-Datei schau dir mal file_get_contents() an.
Rücke den Text um eine bestimme anzahl ein z.B. 4 Leerzeichen, das ist sehr gebräuchlich, sieht einheitlicher und sauberer aus und ist zudem besser lesbar.
~Arano