You are not logged in.

  • Login

1

Wednesday, August 9th 2006, 6:17am

Link Counter mit IP Sperre (Daten in dat Dateien)

Liegt es eventuell daran das es noch so früh ist???

Naja ich bin grade Dabei so einen kleinen Counter für meine Partnerseiten am basteln, gesagt getan.

Hier mal der Code:

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
// Counter Eintsellungen
$partner_uri = $_SERVER['QUERY_STRING'];
$new_url = "http://www.".$partner_uri."";
echo $counterdat;
$file = "ip_data.dat";
// IP Serre
$duration = 30*60; // 30 Minuten
 
$lines = file($file);
foreach($lines as $line) {
	list($ip, $time) = explode("µ", $line);
	if($time > time()-$duration) {
		$ips[$ip] = trim($time);
	}
}
$ip = $_SERVER['REMOTE_ADDR'];
if(@array_key_exists($ip, $ips)) {
	if($ips[$ip] > time()-$duration) {
		// TRUE
		$ips[$ip] = time();
		$was_here = TRUE;
	}
} else {
	$ips[$ip] = time();
	$was_here = FALSE;
}
$fp = fopen($file, "w");
foreach($ips as $ip=>$time) {
	fputs($fp, $ip."µ".$time."\n");
}
fclose($fp);
 
if($was_here) {
	header( 'Location: '.$new_url.'' );
	exit();
 
 
} else {
 
	$counterdat  = "".$partner_uri.".dat";
	$datei = fopen("$counterdat","w");
	$counter = fgets($datei, 10);
	$counter = $counter + 1;
	rewind($datei);
	file_put_contents("$datei",$counter);
	fclose($datei);
	header( 'Location: '.$new_url.'' );
	exit();
 
 
}
?>


So gesehen wird wenn jetzt ein User auf einen Partnerlink klickt halt im Ordner ./out eine neue Datei wie z.B. easy-coding.de.dat angelegt und oder die alte ausgelesen & um 1 erhöht was aus unerklärlichen Gründen derzeit auch nicht geht :shock:

Jetzt möchte ich irgendwie:

1. Das der Counter wirklich um 1's erhöht wird!
2. Das aber nur nicht geht wenn der User schon diesen Partnerlink angeklickt hat (Derzeit wird ja schon nicht mehr erhöht wenn der User einen anderen Link geklickt hat :roll: )

Ich komme nicht mehr klar...

Danke schon mal für Hilfe :wink:

2

Wednesday, August 9th 2006, 8:18am

wie wird dieses Script aufgerufen?
Welche Parameter möchtest du alles übergeben haben?
Gibt es sonst noch andere Dateien, die mit diesem Script in Verbindung stehen?
Latest blogs Latest blogs: PuTTY 0.60 erschienen

3

Wednesday, August 9th 2006, 8:38am

Öhm :shock:

Also das Script wird aufgerufen wenn der User auf einen Partnerlink wie z.B. http://www.xxx.tld/out/?easy-coding.de klickt!

Welche anderen Dateien?

Nur halt die Datei in der die Ip's gespeichert werden & die Counter Dateien also für das Beispiel easy-coding.de wäre das dann im Ordner ./out die Datei easy-coding.de.dat

4

Wednesday, August 9th 2006, 11:03am

Hi,
solltest du die datei nicht auch zum lesen öffnen, wenn du mit fgets drauf zugreifst?

PHP Quellcode

1
$datei = fopen("$counterdat","w");

fopen

überflüssig im code ist die if/else
da am ende ja sowieso weitergeleitet wird

außerdem solltest du den header auf eine permanente weiterleitung umstellen - ist aus suchmaschinen-sicht besser für beide seiten des linktauschs

PHP Quellcode

1
2
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.url.tld");

5

Wednesday, August 9th 2006, 3:54pm

So wirklich bin ich mir jetzt nicht im klaren was du meinst dOnUt :shock:

Die Datei wird doch gelesen, oder nicht?

Also ich hab das ganze jetzt mal ein bisschen anders geschrieben & jetzt werden wenigstens die Counter Dateien erstellt!

Aber eigendlich wollte ich das jetzt ja so haben das die Ip Sperre halt nur für diesen Link gilt.

Beispiel:

User klickt auf denn Partnerlink http://www.xxx.tld/out/easy-coding.de
die Ip Sperre wird für ihn für diesen Link gesetzt.
Derzeit wird ja kein Hit mehr gezählt wenn der User schon auf einen Link geklickt hat!

Quoted

PHP Quellcode

1
$datei = fopen("$counterdat","w");


Öffne ich sie doch!

6

Wednesday, August 9th 2006, 4:15pm

Quoted from ""Torsten""

Die Datei wird doch gelesen, oder nicht?


nein, wird sie eben nicht - wenn du sie mit dem parameter "w" öffnest, dann wird der inhalt einfach gleich null gesetzt - ohne den inhalt der datei zu lesen
"r+" öffnet zum lesen und schreiben

(hab außerdem die intval funktion benutzt, damit das \n gleich ignoriert wird)

so inkrementierst du den wert korrekt

PHP Quellcode

1
2
3
4
5
6
$datei = fopen("$counterdat","r+");
$counter = intval(fgets($datei, 10));
rewind($datei);
$counter++;
fwrite($datei, $counter);
fclose($datei);

7

Wednesday, August 9th 2006, 4:42pm

Ich hätte mir vieleicht mal http://www.easy-coding.de/php/fopen.html durchlesen sollen :lol:

Danke schön wenn es dich nicht gebe dann :roll:

Wenn ich mich nicht irre wird jetzt aber nicht mehr wie gewünscht & falls nicht vorhanden eine neue Counter Datei angelegt sprich wenn es die Datei www.easy-coding.de.dat nicht gibt gibts ne Meldung & dann wird bei reload weitergeleitet die Datei aber nicht erstellt...

Zumindest wird sie bei mir nicht erstellt...

Ich könnte ja natürlich irgendwie so eine Datei anlegen

Und noch dazu fällt mir grade auf das die Zahl in denn Counterdateien nicht einfach um 1 erhöht werden sonder dann erst 1 dahinter eine 2 dahinter eine 3 usw gesetzt wird...

8

Wednesday, August 9th 2006, 5:16pm

Wunder schön irgendwie klappt jetzt alles eigendlich mit diesem Code :D

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
// Counter Eintsellungen
$partner_uri = $_SERVER['QUERY_STRING'];
$new_url = "http://www.".$partner_uri."";
$file = "ip_data.dat";
// IP Serre
$duration = 30*60; // 30 Minuten
 
$lines = file($file);
foreach($lines as $line) {
list($ip, $time) = explode("µ", $line);
if($time > time()-$duration) {
$ips[$ip] = trim($time);
}
}
$ip = $_SERVER['REMOTE_ADDR'];
if(@array_key_exists($ip, $ips)) {
if($ips[$ip] > time()-$duration) {
// TRUE
$ips[$ip] = time();
$was_here = TRUE;
}
} else {
$ips[$ip] = time();
$was_here = FALSE;
}
$fp = fopen($file, "w");
foreach($ips as $ip=>$time) {
fputs($fp, $ip."µ".$time."\n");
}
fclose($fp);
 
if($was_here) {
header( 'Location: '.$new_url.'' ); 
          exit(); 
 
 
} else {
 
$counterdat  = "".$partner_uri.".dat";
if(file_exists($counterdat)){
$datei = fopen("$counterdat","r+");
$counter = intval(fgets($datei, 10));
$counter++; 
rewind($datei);
fwrite($datei, $counter);
fclose($datei);
header( 'Location: '.$new_url.'' ); 
          exit(); 
}
else{
$datei = fopen("$counterdat","w");
fclose($datei);
$datei = fopen("$counterdat","r+");
$counter = intval(fgets($datei, 10));
$counter++; 
rewind($datei);
fwrite($datei, $counter);
fclose($datei);
header( 'Location: '.$new_url.'' ); 
          exit(); 
 }
}
?>


Jetzt hätte ich das gerne nur noch so das die IP Sperre immer nur für einen Link gilt sprich der User kann in der angegebenen Zeit nur 1 Mal für eine Partnerseite einen Hit abgeben...



Also eigendlich hmm:

Meine Idee für jede Counterdat auch ne Ip dat anlegen alá easy-coding.de_ip.dat
und dann halt die andere Ip Sperre ein wenig verändern oder zu umständlich???

9

Wednesday, August 9th 2006, 5:17pm

hast du irgendwelche chmod rechte vergessen

der ordner, in dem du die .dat dateien erstellst, muss chmod 0777 sein
die ip_data.dat muss 0666 sein
und die domain.dat erstellst du am besten auch mit 0777, damit du sie sowohl per ftp löschen kannst, als auch per browser

hier nochmal "meine" version

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
// Counter Einstellungen
$partner_uri = $_SERVER['QUERY_STRING'];
$new_url = "http://www.".$partner_uri."";
$file = "ip_data.dat";
 
// IP Serre
$duration = 30*60; // 30 Minuten
 
$lines = file($file);
foreach($lines as $line) {
	list($ip, $time) = explode("µ", $line);
	if($time > time()-$duration)
		$ips[$ip] = trim($time);
}
$ip = $_SERVER['REMOTE_ADDR'];
if(@array_key_exists($ip, $ips)) {
	if($ips[$ip] > time()-$duration) {
		// TRUE
		$ips[$ip] = time();
		$was_here = TRUE;
	}
 
} else {
	$ips[$ip] = time();
	$was_here = FALSE;
}
 
//IP Adresse speichern
$fp = fopen($file, "w");
foreach($ips as $ip=>$time) {
	fputs($fp, $ip."µ".$time."\n");
}
fclose($fp);
 
//Inkrementieren?
if(!$was_here) {
	$counterdat  = "".$partner_uri.".dat";
	if(!touch($counterdat))
		echo 'CHMOD des ordners stimmt nicht';
 
	chmod($counterdat, 0777);
	$datei = fopen("$counterdat","r+");
	$counter = intval(fgets($datei, 10));
	rewind($datei);
	fwrite($datei, ++$counter);
	fclose($datei); 
}
 
//Weiterleiten
header("HTTP/1.1 301 Moved Permanently"); 
header( 'Location: '.$new_url.'' );
          exit();
?>


PS: Warum rückst du deinen code nicht ein *gg*

10

Wednesday, August 9th 2006, 6:19pm

Quoted from ""d0nUt""


PS: Warum rückst du deinen code nicht ein *gg*


:shock: Null Ahnung

Naja auf jeden Fall jetzt hab ich das Problem das das Script nicht mehr auf die Url sprich wenn ich out/?easy-coding.de habe leitet er nicht mehr auf die $new_url um die durch das http://www. + easy-coding.de ja eigendlich http;//www.easy-coding.de heißen müsste


... Schau noch mal nach und :shock: komisch der hat denn Ordner out jetzt 004 ansatt wie befohlen 777 und ich bekomme es auch nicht mehr geändert... :?

11

Wednesday, August 9th 2006, 7:17pm

004? wie hast du das angestellt
das heißt du selbst hast keine rechte, deine gruppe hat keine rechte, und andere dürfen nur lesen
ohne root kriegste den schutz wohl gar nicht mehr weg von deiner datei

was klappt denn mit der weiterleitung nicht mehr?

12

Wednesday, August 9th 2006, 7:45pm

Also ich nutze FileZilla ich hab denn Ordner out makiert hab rechts geklickt und dann halt auf Dateiatrribute. Dort habe ich dann bei Nummerischer Wert 777 eingeben und auf und auf Ok gedrückt da das mit denn Dateien dann gar nicht mehr funktionier hat habe ich geschaut & da stand dann auf einmal 004 :shock:

Zu der Weiterleitung

Ich habe mir jetzt einen zweiten Ordner angelegt ./out2 und da hab ich denn chmod auf 777.

So irgendwie ich nehme das Script was du gepostet hattest und dann kommt

1. Die Fehlerseite 403
2. Die Weiterleitung funktioniert aber weder die IP wird in der Datei ip_dat.dat (cmod 666) noch der Counter erhöht
3. Oder irgendwas anderes hab noch nicht alles geshen

Komisch!!!

13

Wednesday, August 9th 2006, 8:41pm

wann kommt der 403er und wann kommt die weiterleitung?
so selten ich die scripts selbst teste - dieses habe ich getestet und funktioniert

403er heißt forbidden - schau mal nach ob beim chmod wirklich alles stimmt

ip_dat = 0666
ordner in dem die .dat's gespeichert werden = 0777
.dat dateien = 0777 (macht das php script automatisch)

14

Wednesday, August 9th 2006, 8:51pm

Ob du es glaubst oder nicht ist alles richtig!

Ordner out2 = cmod 777
Der Ordner out2 ist der in dem die .dat's gespeichert werden!

Komisch ich hab mal getestet:

out/?ballz.de = geht
out/?viewz.info = geht nicht

Also ich weis nicht was da los ist????

Naja vieleicht liegt es ja auch an dem Service auf dem meine Seite derzeit liegt das wäre pytalhost.org

15

Saturday, August 12th 2006, 5:04pm

Bekomme ich keine Hilfe mehr? Ich hab echt kein Plan woran das liegen könnte!

16

Sunday, August 13th 2006, 4:47pm

sorry, keine ahnung

bei mir funktionierts und da es auch bei manchen url von dir geht, musst du halt mal schauen, was da den unterschied macht

haben die beiden dateien die selben rechte, die selben dateieigentümer, selbe gruppe?
am code sollte es jedenfalls nicht liegen

17

Sunday, August 13th 2006, 5:03pm

Ok ich schaue nochmal!

Similar threads

Social bookmarks