Seite 1 von 3

Traffic ermitteln?

Verfasst: 06.02.2006 11:24
von mgutt
Wenn ich mich bei meinem Hoster einlogge erkenne ich dort die Trafficwerte und entsprechenden Limits bzw. Überhänge.

Der Überhang wird mir Monat für Monat berechnet.

Jetzt möchte ich gerne bei Trafficzahl X GB die Downloadfunktion in meinem Forum sperren.

Wie könnte man den Trafficwert ermitteln? Der Hoster verweigert leider den Zugriff auf die Trafficzahlen per Script, aber er selber liest sie an Hand der Logdateien aus, wie er mir mitteilte.

Wie kann ich 1. eine ".gz" komprimierte Datei Tag für Tag entpacken, dann diese per PHP auslesen und die entsprechenden Werte (welche überhaupt) addieren?

Ein kleiner Auszug aus der Logfile:
217.xxx.xxx.xxx - - [04/Feb/2006:20:56:20 +0100] "GET /templates/BadMax/images/folder_sticky.gif HTTP/1.1" 304 - "http://www.maxrev.de/sidforums14-xxxxxx ... xxxxxx.htm" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; msneco 5.0)"
217.xxx.xxx.xxx - - [04/Feb/2006:20:56:20 +0100] "GET /templates/BadMax/images/folder_own.gif HTTP/1.1" 304 - "http://www.maxrev.de/sidforums14-xxxxxx ... xxxxxx.htm" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; msneco 5.0)"
217.xxx.xxx.xxx - - [04/Feb/2006:20:56:20 +0100] "GET /advertising/motyre_banner.jpg HTTP/1.1" 304 - "http://www.maxrev.de/sidforums14-xxxxxx ... xxxxxx.htm" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; msneco 5.0)"
84.xxx.xxx.xxx - - [04/Feb/2006:20:56:23 +0100] "GET /files/052561_718.jpg HTTP/1.1" 200 29685 "http://www.maxrev.de/ftopic3461-60.htm" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
EDIT:

Ok gz bekommt man z.B. so auf (codeschnippsel):

Code: Alles auswählen

// getting content of the compressed file
   $zp = gzopen("../upload/".$zipname, "r" );
   $gzfilesize = filesize("../upload/".$zipname);
   $data = fread ( $zp, $gzfilesize);
   gzclose( $zp );
   
   // writing uncompressed file
   $fp = fopen('../upload/test.jpg', "w" );
   fwrite( $fp, $data );
   fclose( $fp );

Verfasst: 06.02.2006 11:30
von mr.no-name
Wenn du Zugriff auf die Logfiles hast, hilft dir vielleicht Webalizer weiter

Verfasst: 06.02.2006 11:49
von mgutt
Zugriff habe ich. Klar. Du hast recht. Ist ja einfacher.

Das heißt ich lese die index.html vom Webalizer aus.

Wie komme ich auf den Wert der x-ten Spalte und x-ten Zeile?

Für Februar ist das z.B.:
Feb 2006 429960 265289 110578 6854 19614 92796598 34270 552890 1326446 2149804
Der dick geschriebene Wert ist mein Feind ;)

Da die index.html ja immer größer wird (Monat für Monat), weiß ich nicht wie ich das dynamisch auslesen lassen könnte.

Also den kompletten Inhalt auslesen ist unproblematisch. Das ginge so:

Code: Alles auswählen

$fp = fopen('usage/index.html','r');
$fpinhalt = fread($fp, filesize('usage/index.html'));
fclose($fp);
Der Zielinhalt sieht ca. so aus:
<TR><TH ALIGN=left ROWSPAN=2 BGCOLOR="#C0C0C0"><FONT SIZE="-1">Monat</FONT></TH>
<TH ALIGN=center COLSPAN=4 BGCOLOR="#C0C0C0"><FONT SIZE="-1">Tagesdurchschnitt</FONT></TH>
<TH ALIGN=center COLSPAN=6 BGCOLOR="#C0C0C0"><FONT SIZE="-1">Monats-Summe</FONT></TH></TR>
<TR><TH ALIGN=center BGCOLOR="#008040"><FONT SIZE="-1">Anfragen</FONT></TH>
<TH ALIGN=center BGCOLOR="#0080FF"><FONT SIZE="-1">Dateien</FONT></TH>
<TH ALIGN=center BGCOLOR="#00E0FF"><FONT SIZE="-1">Seiten</FONT></TH>
<TH ALIGN=center BGCOLOR="#FFFF00"><FONT SIZE="-1">Besuche</FONT></TH>
<TH ALIGN=center BGCOLOR="#FF8000"><FONT SIZE="-1">Rechner</FONT></TH>
<TH ALIGN=center BGCOLOR="#FF0000"><FONT SIZE="-1">kb</FONT></TH>
<TH ALIGN=center BGCOLOR="#FFFF00"><FONT SIZE="-1">Besuche</FONT></TH>
<TH ALIGN=center BGCOLOR="#00E0FF"><FONT SIZE="-1">Seiten</FONT></TH>
<TH ALIGN=center BGCOLOR="#0080FF"><FONT SIZE="-1">Dateien</FONT></TH>
<TH ALIGN=center BGCOLOR="#008040"><FONT SIZE="-1">Anfragen</FONT></TH></TR>
<TR><TH HEIGHT=4></TH></TR>
<TR><TD NOWRAP><A HREF="usage_200602.html"><FONT SIZE="-1">Feb 2006</FONT></A></TD>
<TD ALIGN=right><FONT SIZE="-1">429960</FONT></TD>
<TD ALIGN=right><FONT SIZE="-1">265289</FONT></TD>
<TD ALIGN=right><FONT SIZE="-1">110578</FONT></TD>
<TD ALIGN=right><FONT SIZE="-1">6854</FONT></TD>
<TD ALIGN=right><FONT SIZE="-1">19614</FONT></TD>
<TD ALIGN=right><FONT SIZE="-1">92796598</FONT></TD>
<TD ALIGN=right><FONT SIZE="-1">34270</FONT></TD>
<TD ALIGN=right><FONT SIZE="-1">552890</FONT></TD>
<TD ALIGN=right><FONT SIZE="-1">1326446</FONT></TD>
<TD ALIGN=right><FONT SIZE="-1">2149804</FONT></TD></TR>
Und die fett geschriebene Zahl brauche ich :-?

Verfasst: 06.02.2006 12:41
von mgutt
Weiter :D

Code: Alles auswählen

 	$_kbarray = file('usage/index.html');
	$kbwert = rtrim($_kbarray[56]);
	echo($kbwert);
Enhält:

Code: Alles auswählen

<TD ALIGN=right><FONT SIZE="-1">92796598</FONT></TD>

Verfasst: 06.02.2006 12:43
von mr.no-name
So hatte ich das garnicht gemeint ;)
Ich dachte eher daran, dass du evtl. die Berechnungsmethode vom Webalizer für deine Zwecke nutzen könntest.

Oder eben, wie du meintest, die Ergebnisseite auslesen - aber in der Hinsicht bin ich überfragt...

Verfasst: 06.02.2006 12:53
von mgutt
So habe ich es gelöst:

Code: Alles auswählen

$_kbarray = file('usage/index.html');
$kbwert = rtrim($_kbarray[56]);
$kbwert = str_replace('<TD ALIGN=right><FONT SIZE="-1">', '', $kbwert);
$kbwert = str_replace('</FONT></TD>', '', $kbwert);

if ($kbwert >  471859200)
{
Da die 57. Zeile (oder 56. ab 0 gesehen) immer die gleiche bleiben müsste, also damit die aktuelle, sollte es so gehen.

Nach dem der Wert die 471859200 KBytes also 450 GB (500 GB sind bei mir frei) überschritten hat, dann geht die Seite nicht mehr (ist eine Downloadseite) und eine Meldung wird ausgegeben.

Muss ich den Wert noch aus Sicherheitsgründen oder so in einen Zahlenwert umwandeln? Mir fällt gerade nicht ein, wie das hieß :roll:

Verfasst: 06.02.2006 13:11
von mgutt
Naja so habe ich mal gemacht:

Code: Alles auswählen

$_kbarray = file('usage/index.html');
$kbwert = trim($_kbarray[56]);
$kbwert = str_replace('<TD ALIGN=right><FONT SIZE="-1">', '', $kbwert);
$kbwert = str_replace('</FONT></TD>', '', $kbwert);
settype($kbwert, "integer");

if ($kbwert > 471859200)
{
Vielleicht hat jemand noch eine andere Idee.

Verfasst: 06.02.2006 13:15
von Jan500
bitte edit funktion nutzen :roll:

[kb=knigge#bumping]Topic-Bumping[/kb]

Jan

Verfasst: 06.02.2006 13:23
von Wissler
Ist das mit dem Download ein Mod?
Wenn ja, welcher ist es?
Kann ich da verhindern, dass User, die nicht eingeloggt sind,
etwas herunterladen können?

Danke im Voraus und Gruß
Wissler

Verfasst: 06.02.2006 15:20
von mgutt
Wegen meinem Code:

Mein Codeschnipsel funktioniert auf jeder Seite, wenn man den Webalizer installiert hat. Dann sollte man aber den Vergleichswert anpassen, wenn man z.B. weniger freien Traffic zur Verfügung hat.

Man könnte z.B. eine simple Meldung ausgeben wie "Sorry, wir haben diesen Monat keinen Traffic mehr zur Verfügung, bitte probiere es ab dem 1. des nächsten Monats wieder" oder man bindet einen anderen Code ein.

Ich habe z.B. danach eine Gruppenprüfung enthalten. Soll heißen, wenn User in einer bestimmten Gruppe sind, dann dürfen sie die Seite dennoch öffnen. Wer in dieser Gruppe ist, bestimme wiederrum ich.


Wegen dem eingeloggt sein:

Das ist noch einfacher ;)

Damit Leute eingeloggt sein müssen, musst Du auf dieser von Dir genannten Seite diesen Code nutzen:

Code: Alles auswählen

if ( !$userdata['session_logged_in'] )
{
   redirect(append_sid("login.$phpEx?redirect=namedeinerseite.$phpEx", true));
}
"namedeinerseite" ersetzt Du entsprechend ;)