Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Einfaches PHP Counter-Script gibt laufzeitüberschreitung aus ?

Frage Entwicklung PHP

Mitglied: mkrasselt1

mkrasselt1 (Level 1) - Jetzt verbinden

02.02.2010, aktualisiert 12.02.2010, 7427 Aufrufe, 6 Kommentare

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---------
01.
   
02.
<html> 
03.
<head> 
04.
<title>Counter</title> 
05.
</head> 
06.
<body><?php 
07.
error_reporting(E_ALL); 
08.
if(!isset($_COOKIE['besucher'])){setcookie("besucher","0",time()+(3600*24));} 
09.
if(isset($_COOKIE['besucher']) and $_COOKIE['besucher'] == 1){ 
10.
                                $count = fopen("./besucher.txt", "r"); 
11.
                                if($count){} 
12.
                                while(!feof($count)){ 
13.
                                                      if(!isset($besucher)){ 
14.
                                                      $besucher = fgets($count); 
15.
16.
17.
                                fclose($count); 
18.
                                echo "$besucher"; 
19.
20.
else{ 
21.
setcookie("besucher","0",time()+(3600*24)); 
22.
$ip = $_SERVER['REMOTE_ADDR']; 
23.
$found = false; 
24.
$iplog = fopen("./iplog.txt", "a"); 
25.
if($iplog){} 
26.
while(!feof($iplog)){ 
27.
                      $ips = fgets($iplog); 
28.
                      $ips = substr($ips,0,-1); 
29.
                      if($ips == $ip){$found = true;} 
30.
31.
if($found == false){  
32.
                    fwrite($iplog, $ip."\n"); 
33.
34.
fclose($iplog);                     
35.
$count = fopen("./besucher.txt", "w+"); 
36.
if($count){} 
37.
while(!feof($count)){ 
38.
                      $besucher = fgets($count); 
39.
40.
                fwrite($count, $besucher); 
41.
                fclose($count); 
42.
                echo "$besucher"; 
43.
 
44.
45.
?> 
46.
</body> 
47.
</html>
----------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
Mitglied: thaenhusen
02.02.2010 um 15:45 Uhr
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
Bitte warten ..
Mitglied: mkrasselt1
02.02.2010 um 15:54 Uhr
Danke,
wäre auch ne idee, aber ich möchte nicht von meinem datenbankserver abhängig sein.
Da ist mir die Smart variante mit den dateien lieber, zumal bei meine 10 besuchern im Jahr,
die datenbank nicht wirklich sinn machen würde.
Ich habe mal die e "weisung befolgt",
hier das Ergebnis: http://michaelshomepage.dnsalias.com/counter.php
Aber das wäre ja nicht das einzige Problem,
da ja in der einen zeile mit der fgets anweisung trotzdem probleme auftreten.
Danke schonmal im vorraus.
mkrasselt1
Bitte warten ..
Mitglied: Arano
02.02.2010 um 16:58 Uhr
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:__
01.
24.$iplog = fopen("./iplog.txt", "a");
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
Bitte warten ..
Mitglied: dog
02.02.2010 um 17:22 Uhr
Hach...wie schön, dass es serialize(), unserialize(), file_get_contents() und file_put_contents() gibt.
Bitte warten ..
Mitglied: mkrasselt1
02.02.2010 um 17:37 Uhr
super, danke, es geht jetz soweit, nur das er bei jedem Besuch hochzählt,
aber das bekomm ich noch hin.
wenn ich fertig bin, zeig ich nochmal mein ergebniss vor.
Übrigens, einen mySQL Server habe ich in meinem Webspace,
der Sogar bei mir zuhause liegt, und ich selbst alles bestimmen, regeln und um die sicherheit
kümmern kann.
warum ich dann keien datenbank verwende ?
ganz einfach, diese Art und weise vereinfacht mir mieine tägliche Sicherung, und außerdem
stört diese kleine Rechnerei meine Server überhaupt nicht,
und für meine wenigen Besucher lohn es sich nicht, eine eigene Tabelle anzulegen,
obwohl das vieleicht die schnellere Variante währe.

mkrasselt1
Bitte warten ..
Mitglied: mkrasselt1
02.02.2010 um 19:31 Uhr
so, meine Variante ist fertig,
ich habe auch noch eine Grafische ausgabe dazugebaut,
man hat 10 .gif dateien für alle Zahlenstände,
im Einzeiligen dokument besucher.txt kann man die besucherzahl eintragen
in iplog stehen die Ganzen IP-adresse der Besucher, die die seite aufgerufen haben.
Der Counter zählt die Besucher jeden Tag, und summiert sie.(
(mehrmalige Besuche an verschiedenen Tagen der Woche werden Tagweise als 1 gezählt)
hier die Scriptsamlung als .zip
http://michaelshomepage.dnsalias.com/download/besucherzaehler.zip
sie sollte als includ eingebunden werden, aus einer ebene darüber, so:
<?php include "./counter/counter.php"; ?>
happy Counting

mkrasselt1

PS: Die Bilder kann man natürlich ersetzen, einfach ein neues Gif in der Größe mit passendem Namen
in den Ordner Count legen
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst PowerShell Script Move-Item nach x Tagen (5)

Frage von lupolo zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...