28. februar 2006 - 17:15Der 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".
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.
$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 ?
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.
$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")
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'.
$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 ..
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.
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.