Avatar billede tanx Nybegynder
28. februar 2006 - 17:15 Der er 19 kommentarer og
1 løsning

Script der skriver til .htaccess

Hejsa,

Jeg er ude efter et script der skriver til .htaccess. Scriptet skal:

1) chekker om den besøgende ip findes i mysqldatabasen.
2) Hvis ipen findes og hvis (allow_more = 'false') - så skal der i .htaccess tilføjes flg. "deny from xxx.xxx.xxx".

Er der nogen der har et godt forslag der virker?
Avatar billede fixxxer Nybegynder
28. februar 2006 - 17:26 #1
Tag et kig på fopen og fwrite kaldene:

http://dk2.php.net/function.fopen
http://dk.php.net/fwrite
Avatar billede tanx Nybegynder
28. februar 2006 - 17:34 #2
Jeg har forsøgt mig lidt frem (men mine programmeringsevner lader meget tilbage at ønske). Jeg er kommet frem til dette - som ikke virker!

$result = mysql_query("SELECT $tbl_name(ip,allow) WHERE ip ='".$ip."'" AND allow ='false'")

while ($row = mysql_fetch_array($result)) {
$filename = ".htaccess";
$fp = fopen($filename,'a+');
fwrite($fp,"deny from $REMOTE_ADDR \r\n");
fclose($fp);
Avatar billede inctor Nybegynder
28. februar 2006 - 17:37 #3
$result = mysql_query("SELECT ip,allow FROM DIN TABEL WHERE ip ='".$ip."'" AND allow ='false'");

while ($row = mysql_fetch_array($result)) {
$filename = ".htaccess";
$fp = fopen($filename,'a+');
fwrite($fp,"deny from $REMOTE_ADDR \r\n");
fclose($fp);


prøv den og skift DIN TABEL ud med tabel navnet ..
Avatar billede inctor Nybegynder
28. februar 2006 - 17:39 #4
Undskyld jeg osse spørger men, hvorfor skal den være i en While ?  :S

$result = mysql_query("SELECT ip,allow FROM DIN TABEL WHERE ip='".$ip."'" && allow='false'");
$row = mysql_fetch_array($result);
$filename = ".htaccess";
$fp = fopen($filename,'a+');
fwrite($fp,"deny from $REMOTE_ADDR \r\n");
fclose($fp);
Avatar billede inctor Nybegynder
28. februar 2006 - 17:39 #5
Forresten, hvilken fejl får du ?
Avatar billede tanx Nybegynder
28. februar 2006 - 18:22 #6
Hej Inctor - unespected T_string - mener jeg.

Som sagt er jeg intet kodegeni - og while skulle ikke have været med i eksemplet.

Din koder virker - det jeg er ude efter er:
- hvis kriterierne i $result er opfyldt (dvs ip'en er 'false'), så skal .htaccess åbnes og ip'en skal tilføjes.

Koden virker, men lidt for godt, for uanset hvad der står i mysql_query'en, så tilføjes ip'en alligevel til.htaccess.

Måske kan det lydes med en if-sætning? :?
Avatar billede inctor Nybegynder
28. februar 2006 - 19:33 #7
post lige hele din kode her ind til .. det lidt nemmere ..
Avatar billede tanx Nybegynder
28. februar 2006 - 19:46 #8
<?php

***
$sql_connect = mysql_connect("$host", "$username", "$password") or die("MySQL Connection Failed: " . mysql_error());;
$db_connect = mysql_select_db("$db_name")or die("Could not select DB: " . mysql_error());;

$ip = $_SERVER['REMOTE_ADDR'];

$result = mysql_query("SELECT ip,allow FROM iptabel WHERE ip = '".$ip."' AND allow = 'false'");
$row = mysql_fetch_array($result);
$filename = ".htaccess";
$fp = fopen($filename,'a+');
fwrite($fp,"deny from $REMOTE_ADDR \r\n");
fclose($fp);

?>
Avatar billede coderdk Praktikant
28. februar 2006 - 19:51 #9
Du har glemt et ; i din mysql_query...
Avatar billede coderdk Praktikant
28. februar 2006 - 19:51 #10
(*efter* din mysql_query - derfor denne fejl)
Avatar billede tanx Nybegynder
28. februar 2006 - 20:05 #11
hmm.. koden ser nu ok ud, synes jeg
Avatar billede inctor Nybegynder
28. februar 2006 - 20:34 #12
altså, hvis ip'en ikke findes i Databasen skal den tilføjes databasen og tilføjes i .htaccess ? eller har jeg forstået der forkert .. ?
Avatar billede inctor Nybegynder
28. februar 2006 - 20:40 #13
<?php
@mysql_connect("localhost","BRUGERNAVN","KODE");
@mysql_select_db("DATABASE");

$ip = $_SERVER['REMOTE_ADDR'];
$result = mysql_query("SELECT ip,allow FROM iptabel WHERE ip = '".$ip."'");
$row = mysql_fetch_array($result);
if($row[allow_more]=false){
$filename = ".htaccess";
$fp = fopen($filename,'a+');
fwrite($fp,"deny from $ip \r\n");
fclose($fp);
}
?>

Den der siger:
Den skal finde ip og allow fra iptabel hvor at ip'en er Remote Addr ..
Hvis Allow_More er sat til false så udfører den handlingen at den åbner .htaccess og skriver: deny from $ip \r\n ... er det det du var ude efter eller hvorn ?
Avatar billede tanx Nybegynder
28. februar 2006 - 20:41 #14
Jeg har allerede et script der logger ip'en og tæller hvor mange gange ip'en har besøgt siden. Når den besøgende foretager sit "besøg" nummer f.eks. 1000 sættes "allow = 'false'"

Formålet med ovenstående script er blot at chekke om ip'en har adgang til siden. Hvis den ikke har det, så skal der skrives til .htaccess.

Scriptet der logger er som følger:

**************
<?php

**

$sql_connect = mysql_connect("$host", "$username", "$password") or die("MySQL Connection Failed: " . mysql_error());;
$db_connect = mysql_select_db("$db_name")or die("Could not select DB: " . mysql_error());;

$ip = $_SERVER['REMOTE_ADDR'];

$fetch = mysql_query("SELECT ip FROM $tbl_name WHERE ip ='".$ip."'") or die(mysql_error());

if ( mysql_num_rows($fetch) == 0 )
{
  mysql_query("INSERT INTO $tbl_name(ip,visits) VALUES('$ip','1')") or die(mysql_error());
} else {
  mysql_query("UPDATE $tbl_name SET visits=visits+1 WHERE ip = '$ip'") or die(mysql_error());
}

$result = mysql_query("UPDATE $tbl_name SET allow='false' WHERE ip = '$ip' AND visits > 999")

?>

*****************
Avatar billede tanx Nybegynder
28. februar 2006 - 20:42 #15
to, sek. prøver lige dit forslag
Avatar billede tanx Nybegynder
28. februar 2006 - 21:27 #16
Det er lige præcis den funktion jeg er ude efter - men desværre får jeg det ikke til at virke.

Kaldet

if($row[allow]=false)

burde kigge i iptabel.allow (jeg kalder den allow), og derved chekke om allow er sat til 'true' el. 'false'. Desværre sker der ikke noget, og der bliver ikke skrevet til .htaccess. Men hvis jeg så kalder den

if($row[allow]='false')

så bliver der skrevet til .htaccess, uanset om allow er sat til 'true' el. 'false'.

Håber jeg fik forklaret det tydeligt!
Avatar billede inctor Nybegynder
01. marts 2006 - 16:29 #17
<?php
@mysql_connect("localhost","BRUGERNAVN","KODE");
@mysql_select_db("DATABASE");

$ip = $_SERVER['REMOTE_ADDR'];
$result = mysql_query("SELECT ip,allow FROM iptabel WHERE ip = '".$ip."'");
$row = mysql_fetch_array($result);
echo ".$ip.";
exit;
if($row[allow_more]=false){
$filename = ".htaccess";
$fp = fopen($filename,'a+');
fwrite($fp,"deny from $ip \r\n");
fclose($fp);
}
?>

der skal osse stå allow_more .. og ikk kun allow .. hvad hedder rækken da i iptabel ? hedder den allow_more eller allow ? prøv den ovenover, hvis din ip bliver udskrevet virker den .. ellers er der noget galt .. med $ip ..
Avatar billede inctor Nybegynder
01. marts 2006 - 16:33 #18
$_SERVER['REMOTE_ADDR']

<?php
@mysql_connect("localhost","BRUGERNAVN","KODE");
@mysql_select_db("DATABASE");

$result = mysql_query("SELECT ip,allow FROM iptabel WHERE ip = $_SERVER['REMOTE_ADDR']
");
$row = mysql_fetch_array($result);
if($row[allow_more]=false){
$filename = ".htaccess";
$fp = fopen($filename,'a+');
fwrite($fp,"deny from $ip \r\n");
fclose($fp);
}
?>
eller:
<?php
@mysql_connect("localhost","BRUGERNAVN","KODE");
@mysql_select_db("DATABASE");


$result = mysql_query("SELECT ip,allow FROM iptabel WHERE ip = '$_SERVER['REMOTE_ADDR']'");
$row = mysql_fetch_array($result);
if($row[allow_more]=false){
$filename = ".htaccess";
$fp = fopen($filename,'a+');
fwrite($fp,"deny from $ip \r\n");
fclose($fp);
}
?>

prøv en af de to .. og se om en af dem virker .
Avatar billede tanx Nybegynder
08. marts 2006 - 23:26 #19
hey inctor - sorry for den sene tilbagemelding.

Jeg brugte din tredje-seneste kommentar og modificerede mit script en smule, således at det ikke længere sætte true/false-værdien til false når >50 - men derimod lader scriptet skrive direkte til .htaccess så snart en ipadresse er >50 hits.

Tak for dine bidrag - smid et svar og få point ;)
Avatar billede inctor Nybegynder
08. marts 2006 - 23:53 #20
Svar Kommer Her --
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester