Top-Themen

Aktuelle Themen (A bis Z)

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 ?

Mitglied: mkrasselt1

mkrasselt1 (Level 1) - Jetzt verbinden

02.02.2010, aktualisiert 12.02.2010, 7896 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 ..
Ähnliche Inhalte
PHP

Übergabe Formularinhalte an externes PHP Script

gelöst Frage von schneerunzelPHP15 Kommentare

Hallo zusammen, ich habe heute eine relativ außergewöhnliche Frage: Und zwar geht es um folgendes: Ich habe für eine ...

Batch & Shell

Remote-PowerShell Script gibt Probleme bei einigen Testrechnern

gelöst Frage von AlthalusBatch & Shell7 Kommentare

Hallo zusammen, ich habe gerade ein Problem mit der Ausführung eines Powershell Scripts. Was nur bei einigen Testrechnern nicht ...

PHP

Magento PHP Script um Kategorieeinstellungen zu ändern

Frage von sbsnewbiePHP1 Kommentar

Moin Leude, folgende Frage: Ich müsste die Einstellungen jeder Kategorie in meinem Magentoshop ändern. Jede Kategorie soll die Einstellungen ...

PHP

PHP Script Probleme beim Ausführen von ShellExec Commands

Frage von MaxPainPHP1 Kommentar

Guten Abend zusammen, bezüglich PHP-Scripting habe ich derzeitig ein Problem. Ich möchte gerne auf meinem Raspberry Pi 3 ein ...

Neue Wissensbeiträge
Viren und Trojaner

Staatstrojaner soll auch per Einbruch installiert werden können

Information von transocean vor 16 StundenViren und Trojaner2 Kommentare

Moin, Bundesinnenminister Horst Seehofer will dem Verfassungsschutz Wohnungseinbrüche erlauben, um den geplanten Staatstrojaner zu installieren. Gruß Uwe

Windows 7
Win7 Update scheitert KB4512506
Information von infowars vor 1 TagWindows 7

Falls jemand auch das Problem hat mit dem: Monatliches Sicherheitsqualitätsrollup für Windows 7 für x64-basierte-Systeme (KB4512506) Das scheint mit ...

Humor (lol)
Wenn hacken nach hinten los geht
Information von em-pie vor 2 TagenHumor (lol)4 Kommentare

Moin, weil heute Freitag ist, nachfolgender kurzer Artikel zum schmunzeln:) l+f: NULL ist ein notorischer Falschparker

Windows Update
Windows: August 2019 Patchday-Probleme
Information von kgborn vor 2 TagenWindows Update3 Kommentare

Ich kippe mal einige kurze Informationen hier rein - vielleicht hilft es Betroffenen. Die August 2019-Updates für Windows haben ...

Heiß diskutierte Inhalte
SAN, NAS, DAS
Leiser stromsparender Debian EXT4 NAS-Heimserver: ECC-RAM wie betreiben?
Frage von Laser12SAN, NAS, DAS26 Kommentare

Moin, aktuell stelle ich einen Rechner zusammen, den mein Computerhändler bauen wird. Nach Jahrzehnten mit Desktops und zwei Notebooks ...

Windows Server
Läuft Microsoft Server SQL2008R2 unter W2016, obwohl nicht supportet?
Frage von LochkartenstanzerWindows Server13 Kommentare

Moin Kollegen, Kurze Frage: Läuft Microsoft Server SQL2008R2 unter W2016, obwohl nicht supportet? Da ich i.d.R. nicht für die ...

Netzwerkgrundlagen
Proxmox auf dedicated Root Server mit nur einer IP nutzen
gelöst Frage von ndreier933Netzwerkgrundlagen12 Kommentare

Hallo Community, ich bin neu hier im Forum und weiß nicht ob ich das Thema richtg zugeordnet habe?Zusätzlich habe ...

Windows Server
Name einer neuen AD Gesamtstruktur ? immer .local?
gelöst Frage von Motte990Windows Server11 Kommentare

Hallo ihr Lieben Ich bin gerade dabei auf einem Windows Server 2019 Core oder Desktop eine neu Active Directory ...