![]() |
Willkommen, Gast ( Anmelden | Registrierung )
![]() |
![]()
Beitrag
#1
|
|
Kommt Zeit, kommt Rat, kommt Conrad! ![]() Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 ![]() |
Moin Gemeinde!
Auf verschiedenen (php) Seiten auf meiner Homepage werden die Seitenbesuche gezählt (php-Zähler schreibt in log-Datei; Log-Datei wird ausgelesen und gibt Ergebnis raus.). Um die Seitenbesuche alle auf einmal überblicken zu können, habe ich eine PHP-Seite gebastelt, die einfach die Log-Dateien der Seiten ausliest, die ein php-Counter haben. Das Ergebnis wird dann in einer Tabelle untereinander ausgegeben. So weit, so gut. Nun möchte ich aber, mit meinen bescheidenen php-Kenntniss, daß nicht nur ausgelesen wird, sondern, daß auch sortiert wird! Also, alle Log-Dateien werden ausgelesen, die Seite stellt die Ergebnisse so da, daß das schlechteste Ergebnis (=die kleinste Zahl) oben steht. Ich bin überzeugt, daß das geht! Aaaber, WIE stelle ich sowas an? cu Conny |
|
|
![]() |
![]()
Beitrag
#2
|
|
is getting harder Gruppe: User Beiträge: 26 Mitglied seit: 24.09.2004 Mitglieds-Nr.: 3.770 ![]() |
Hilfreich wäre es wenn Du den Quellcode Deiner "Auswert-Seite" posten könntest.
Auch die STtuktur der LOG-Datei ist nicht uninteressant. MfG hondocrx |
|
|
![]()
Beitrag
#3
|
|
hdb ![]() ![]() ![]() ![]() ![]() Gruppe: User Beiträge: 685 Mitglied seit: 26.10.2001 Wohnort: Köln Mitglieds-Nr.: 5 ![]() |
|
|
|
![]()
Beitrag
#4
|
|
Kommt Zeit, kommt Rat, kommt Conrad! ![]() Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 ![]() |
Hallo hondocrx,
die Code ist nichts anders als eine Tabelle in der die Log-Datei aufgerufen wird. Hier ein Ausschnitt: HTML <TABLE BORDER="0" CELLPADDING="20" SUMMARY="Plazierungstabelle"> <TR> <TH>Counterdatum</TH> <TH>Hits</TH> <TH>Link</TH> </TR> <TR> <TD><B>Counter:</B> Bilder vom Brand:<BR><B>Seit:</B> 17. Okt. 2004</TD> <TD> <?php include('/home/www/web784/html/scripts/count/brand/counter.log'); ?></TD> <TD><A HREF="../../../galerie_brand.php" TARGET="_blank">galerie_brand.php</A></TD> </TR> <TR> <TD><B>Counter:</B> Bilder Feriencamp<BR><B>Seit:</B> 14. Okt. 2004</TD> <TD> <?php include('/home/www/web784/html/scripts/count/camp/counter.log'); ?></TD> <TD><A HREF="../../../galerie_camp.php" TARGET="_blank">galerie_camp.php</A></TD> </TR> <TR> <TD><B>Counter:</B> Bilder Herbstturnier<BR><B>Seit:</B> 14. Okt. 2004</TD> <TD> <?php include('/home/www/web784/html/scripts/count/herbst/counter.log'); ?></TD> <TD><A HREF="../../../galerie_herbst.php" TARGET="_blank">galerie_herbst.php</A></TD> </TR> ************ usw. Die Log-Datei ist nichts anderes als eine txt-Datei ohne Code mit nur eine Zahl, die sich immer um eins erhöht, wenn ein Besucher die entsprechende Seite anklickt. Im Grunde muss das sortier-php-Script die Tabelle neu gestallten; die einzelne <TR>-Abschnitte müßen mit dem ausgelesenen Wert -aus der counter.log- so in die Tabelle zurückgeschrieben werden, daß die kleinst ausgelesene Zahl oben in der Tabelle erscheint. @Dieter: Danke für den Link, werde mich damit befassen (und hoffe, daß ich *mithalten* kann ![]() cu Conny |
|
|
![]()
Beitrag
#5
|
|
____________________ ![]() Gruppe: Admin Beiträge: 1.220 Mitglied seit: 20.10.2001 Mitglieds-Nr.: 3 ![]() |
Du musst Dir ein Array bauen und dort (z.B.) Name der Datei mit dem korrespondierenden Zähler einbauen. Das sortierst Du dann, und gibst es in einer Schleife aus.
Ich gucke dazu immer in SelfPHP: Array sortieren: http://www.selfphp.info/funktionsreferenz/...ionen/asort.php Wobei Array nur 'ne Tabelle ist mit 2 Spalten. Einmal ein Key und ein dazugehöriger Value. Bei Dir wäre Key halt der Name der Seite und Value der Zählerstand. Das kannst Du dann sortieren ... und ausgeben. Ist ein Abend einlesen und basteln *g* Grüße Andreas |
|
|
![]()
Beitrag
#6
|
|
Kommt Zeit, kommt Rat, kommt Conrad! ![]() Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 ![]() |
Hi,
nun, die Logik dahinter habe ich verstanden, sowohl bei Dieters als auch bei Andreas Link. Was mir schwer fällt, ist die richtige Einbindung in der HTML-Code. Wie definiere ich die Tabelle als Array? Und wie binde ich $key und $val so ein, daß der echo die Tabelle -oder die Tabellenzeilen?- richtig schreibt, bzw. ausgibt? cu Conny (schwer, schwer, schwer) |
|
|
![]()
Beitrag
#7
|
|
____________________ ![]() Gruppe: Admin Beiträge: 1.220 Mitglied seit: 20.10.2001 Mitglieds-Nr.: 3 ![]() |
So lese ich z.B. Verzeichnisnamen in ein Array:
HTML function leseVerzeichnis() { $verz=opendir ('.'); while ($file = readdir($verz)){ if($file != "." && $file != ".." && substr($file, -4) == ".txt"){ $fp = fopen("$file","r"); flock($fp,2); $info = trim(fgets($fp,1000)); $kapitel = trim(fgets($fp,1000)); flock($fp,3); fclose($fp); $speicher[$kapitel] = $file; } } closedir($verz); ksort($speicher); $speicher = array_values($speicher); return $speicher; } Bei Dir könnte $kapitel der Zählerstand sein (danach möchtest Du ja sortieren) und $file ist halt der Dateiname. Nur $speicher = array_values($speicher); musst Du weglassen ... damit verwandelst würdest Du $kapitel weglöschen und der Reihe nach Durchnummerieren. Das willst Du ja nicht! Grüße Andreas |
|
|
![]()
Beitrag
#8
|
|
Kommt Zeit, kommt Rat, kommt Conrad! ![]() Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 ![]() |
hi,
ich dachte mehr an:
Wenn ich den Bereich (array) -in der die Zahlen gesucht werden- Vorher festlege , wo soll denn nachher das Ergebnis hinein geschrieben werden? Im gleichen Array (wird also nach auslesen überschrieben?) Conny (noch kein Durchblick...) |
|
|
![]()
Beitrag
#9
|
|
is getting harder Gruppe: User Beiträge: 26 Mitglied seit: 24.09.2004 Mitglieds-Nr.: 3.770 ![]() |
zweiter Versuch mit meinem Script. War schon ein wenig spät.
Das Problem bei Dir ist, das Du die verschiedensten Texte (Bilder Feriencamp, Bilder vom Brand, usw) mitsortieren musst. Nun ist die Frage wie oft diese Statistik aufgerufen wird. Bei stetigem Benutzen empfehle ich eine MySQL-DB für den Counter und die Ausgabetexte. Das untenstehende Script arbeitet mit deinen Logfiles. Ist deswegen aber auch etwas umständlich. Diesen Code bitte einfügen nach <TH>Link</TH></TR> und vor </table> MfG QUELLTEXT <?
// // einlesend er Logfiles in die entsprechenden Arrays // $brand_array =file('/home/www/web784/html/scripts/count/brand/counter.log'); $camp_array =file('/home/www/web784/html/scripts/count/camp/counter.log'); $herbst_array =file('/home/www/web784/html/scripts/count/herbst/counter.log'); // // test mit lokalen Dateien // // $brand_array =file('brand.log'); // $camp_array =file('camp.log'); // $herbst_array =file('herbst.log'); // // Übergeben des Quelltextes --> $xxxx1 ist vom <TR> bis vor den Counterwert // Übergeben des Quelltextes --> $xxxx2 ist vom Counterwert bis zum </TR> // $brand1='<TR><TD><B>Counter:</B> Bilder vom Brand:<BR><B>Seit:</B> 17. Okt. 2004</TD><TD> '; $brand2='</TD><TD><A HREF="../../../galerie_brand.php" TARGET="_blank">galerie_brand.php</A></TD></TR>'; $camp1='<TR><TD><B>Counter:</B> Bilder Feriencamp<BR><B>Seit:</B> 14. Okt. 2004</TD><TD> '; $camp2='</TD><TD><A HREF="../../../galerie_camp.php" TARGET="_blank">galerie_camp.php</A></TD></TR>'; $herbst1='<TR><TD><B>Counter:</B> Bilder Herbstturnier<BR><B>Seit:</B> 14. Okt. 2004</TD><TD> '; $herbst2='</TD><TD><A HREF="../../../galerie_herbst.php" TARGET="_blank">galerie_herbst.php</A></TD></TR>'; // // Übergen der Daten in ein Mehrdimensionales Array // Kann nach belieben erweitert werden, die Reihenfolge muss beachtet werden // $anzahl = array (array($brand_array[0],$camp_array[0],$herbst_array[0]),array($brand1,$camp1,$herbst1),array($brand2,$camp2,$herbst2)); // // sortieren der Couterwerte, heir aufsteigend. Soll zuerst der größte wert // ausgegeben werden muss SORT_ASC durch SORT_DESC ersetzt werden // array_multisort ($anzahl[0], SORT_ASC, SORT_NUMERIC,$anzahl[1],$anzahl[2]); // // Ausgabe des Quellcodes und der Counterwertes // Muß nicht angepasst werden. Egal wie viele Logs eingelesen werden // for ($i=0;$i<count($anzahl[0]);$i++) { echo $anzahl[1][$i]; echo $anzahl[0][$i]; echo $anzahl[2][$i]; } ?> Der Beitrag wurde von hondocrx bearbeitet: 31.01.2005 - 10:47 |
|
|
![]()
Beitrag
#10
|
|
Kommt Zeit, kommt Rat, kommt Conrad! ![]() Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 ![]() |
Hallo hondocrx,
die ersten Gehversuche sind vielversprechend! ![]() Mit Deiner Vorlage bin ich -glaube ich- in der Lage die Tabelle so weiter auszubauen bis alle Counterlinks richtig plaziert sind. Vielen Dank ![]() Bei weiteren Fragen, bin ich so frei und melde mich wieder ![]() Zu Deiner Anmerkungen: Es handelt sich hier um eine art 'Kontrol-Seite' meinerseits und wird nicht so oft aufgerufen (wenn, dann auch nur von mir). Ich möchte bei diesen Bilder-Seiten nur ein wenig Überblick behalten. Wenn sie irgendwann kaum noch besucht werden (Wenn alle sich an den Bilder Satt gesehen haben) kommt die Seite raus und wird ausgetauscht gegen eine neue Bildergalerie-Seite. Daher auch das Datum 'seit dem so-und-so-vielsten' . cu Conny |
|
|
![]()
Beitrag
#11
|
|
Kommt Zeit, kommt Rat, kommt Conrad! ![]() Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 ![]() |
Sodele,
da bin ich wieder. Tabelle umgeschrieben, hochgeladen und alles klappt wunderbar! ![]() hondocrx nochmal vielen Dank für Deine Vorlage ![]() cu Conny |
|
|
![]()
Beitrag
#12
|
|
Kommt Zeit, kommt Rat, kommt Conrad! ![]() Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 ![]() |
Hallo,
ein kosmetischer Tipp habe ich noch bekommen, die möchte ich euch nicht vorenthalten: Da in der Log-Datei nur ein einziger Wert steht (nur die Zahl), kann man diesen wert auch als String laden. Das gibt ein Array im Array weniger. Aus: $brand_array =file('/home/www/web784/html/scripts/count/brand/counter.log'); wird dann: $brand =file_get_contents('/home/www/web784/html/scripts/count/brand/counter.log'); Weiter unten dann: $anzahl = array (array($brand,$camp,$herbst),array($brand1,$camp1,$herbst1),array($brand2,$camp2,$herbst2)); cu Conny |
|
|
![]()
Beitrag
#13
|
|
is getting harder Gruppe: User Beiträge: 26 Mitglied seit: 24.09.2004 Mitglieds-Nr.: 3.770 ![]() |
Hi Conny!
Geht natürlich auch. Hat aber den Nachteil das bei meinen Logs fast immer Kommentare mit drin stehen. ( In meinem Fall nutzte ich diese Einträge als einfachen Kopierschutz der gerne übersehen wird). Somit kann man den Befehl nur nutzen wenn man weiß wie die Datei geschrieben wird Desweiteren wird kein Array gespart. Du übergibts ja kein Array sondern einen Wert. MfG PS: Dein Kontaktformular funktioniert nicht richtig. Die Umlaute werden abgelehnt obwohl diese mitlerweile erlaubt sind. (gerd@mueller.de war ich) Kurz zu den Bildern (hier Feuer). Eventuell könntest Du diese vom Speicherbedarf her verkleinern. über 100 kB für diese Größe ist ganz schön fett. Der Beitrag wurde von hondocrx bearbeitet: 01.02.2005 - 23:42 |
|
|
![]()
Beitrag
#14
|
|
Kommt Zeit, kommt Rat, kommt Conrad! ![]() Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 ![]() |
Hi,
ZITAT(hondocrx @ 01.02.2005 - 23:27) Dein Kontaktformular funktioniert nicht richtig. Die Umlaute werden abgelehnt obwohl diese mitlerweile erlaubt sind. (gerd@mueller.de war ich) Ja, und nein! Das Formular ist richtig, ich lehne die Umlaute absichtlich ab, weil (nicht lachen!), wenn die e-Mail Adresse einen Umlaut erhält und ich sie im Adressbuch aufnehme, gibt es probleme beim Verwenden diese e-Mail Adressen! (Outlook Expres eben) Frag mich aber blos nicht warum das so ist! Ich hatte auch keine Lust es heraus zu finden, so habe ich kurzer Hand das Formular 'beigestellt'. cu Conny |
|
|
![]()
Beitrag
#15
|
|
Kommt Zeit, kommt Rat, kommt Conrad! ![]() Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 ![]() |
Hi nochmal,
ZITAT Kurz zu den Bildern (hier Feuer). Eventuell könntest Du diese vom Speicherbedarf her verkleinern. über 100 kB für diese Größe ist ganz schön fett. Stimmt, auch da hast Du recht, mit DSL fällt das halt nicht so auf. Ich habe es grad geändert. cu Conny |
|
|
![]()
Beitrag
#16
|
|
Anwärter auf W3.org Mitgliedschaft ![]() ![]() ![]() ![]() ![]() Gruppe: User Beiträge: 550 Mitglied seit: 28.11.2001 Wohnort: Berlin Friedrichshain Mitglieds-Nr.: 107 ![]() |
Hallo
ZITAT(hondocrx @ 01.02.2005 - 23:27) PS: Dein Kontaktformular funktioniert nicht richtig. Die Umlaute werden abgelehnt obwohl diese mitlerweile erlaubt sind. Mal abgesehen davon, dass Conny schon schrieb, dass er das so will, wenn du die Emailadresse nach der Eingabe prüfen willst, bekommst du mit den Umlauten Schwierigkeiten. Ich rede hier nicht von einer Prüfung, ob ein @ vorhanden ist, sondern von einer Prüfung, die kontrolliert, ob der übergebene String dem Standard für Emailadressen entspricht (Welche Zeichen dürfen an welcher Stelle vorkommen). Und da bist du bei Umlautdomains erschossen. Es sind ja nicht nur die deutschen Umlaute erlaubt, sondern z.B. auch arabische, hebräische, chinesische und japanische Buchstaben/Zeichen. Ich habe bisher noch keine Routine gesehen, die das abfangen kann. Dort, wo bei mir Emailadressen eingegeben werden können, schreibe ich dazu, dass Adressen von Umlautdomains nicht akzeptiert werden. Wie der Benutzer darauf reagiert, ob mit Angabe einer anderen Adresse oder überhaupt keine Adressangabe, ist dann seine Sache. Tschö, Auge |
|
|
![]()
Beitrag
#17
|
|
Kommt Zeit, kommt Rat, kommt Conrad! ![]() Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 ![]() |
Hi Auge!
Yep, stimmt schon so, das hier ist der String, HTML if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})$", $mail)) der die e-Mail Eingabe kontroliert. cu Conny |
|
|
![]()
Beitrag
#18
|
|
is getting harder Gruppe: User Beiträge: 26 Mitglied seit: 24.09.2004 Mitglieds-Nr.: 3.770 ![]() |
Soweit haben ja alle Recht. Nru sollte man etwas abwägen für wehn die Seite gedacht ist. So sind hebräische Adressen ja weitestgehend auzuschließen. Da sollte man schon abwägen. Umlaute sind imo noch machbar.
Den Test auf info-Domains würde ich aber schon noch einbauen. MfG |
|
|
![]()
Beitrag
#19
|
|
Anwärter auf W3.org Mitgliedschaft ![]() ![]() ![]() ![]() ![]() Gruppe: User Beiträge: 550 Mitglied seit: 28.11.2001 Wohnort: Berlin Friedrichshain Mitglieds-Nr.: 107 ![]() |
Hallo
ZITAT(Conny @ 02.02.2005 - 15:37) das hier ist der String, HTML if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})$", $mail)) der die e-Mail Eingabe kontroliert. Ehhm: Was machst du mit TLD's mit mehr als 3 Buchstaben? Mit 6 Zeichen ist die Längste mir bekannte: museum. Mein regex: QUELLTEXT preg_match("/^([a-zA-Z0-9]{1,}([\.]?|[-]?|[_]?))*[a-zA-Z0-9]{1,}@([a-zA-Z0-9]{1,}([\.]?|[-]?))*[a-zA-Z0-9]{1,}\.{1}[a-zA-Z]{2,6}$/",$mail) Meiner ist länger! ![]() ![]() ZITAT(hondocrx @ 02.02.2005 - 17:25) ... Nru sollte man etwas abwägen für wehn die Seite gedacht ist. So sind hebräische Adressen ja weitestgehend auzuschließen. Da sollte man schon abwägen. Umlaute sind imo noch machbar. Kennst du jemanden, der eine Emailadresse einer Umlautdomain, aber keine Emailadresse einer Nicht-Umlaut-Domain hat? Ich habe bisher nur Abratendes gelesen, und kenne eben Niemanden, der obige Frage bejahen könnte. Wer sich ausschließlich auf eine Emailadresse einer Umlautdomain verlässt, wird jedenfalls von mir schlicht ignoriert. Tschö, Auge |
|
|
![]()
Beitrag
#20
|
|
Kommt Zeit, kommt Rat, kommt Conrad! ![]() Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 ![]() |
Hi Auge,
ZITAT(Auge) ...Wer sich ausschließlich auf eine Emailadresse einer Umlautdomain verlässt, wird jedenfalls von mir schlicht ignoriert.... Amen! Im Übrigen habe ich mal Dein 'regex' übernommen, meine war éh schon etwas älter ![]() cu Conny |
|
|
Google Bot |
![]()
Beitrag
#
|
![]() Google Ads ![]() |
|
|
|
![]() ![]() |
![]() |
Vereinfachte Darstellung | Aktuelles Datum: 13.05.2025 - 22:22 |