Autor Zpráva
marian34
Profil
Zdravím,takto zapisujem formulár do súboru:
<?php
#zapis
$f = fopen("/home/pi/test.user", "a");
fwrite($f,"\n");
fwrite($f, '[account]');
fwrite($f,"\n");
fwrite($f,  'user = '.$_POST['meno']);
fwrite($f,"\n");
fwrite($f, 'pwd = '.$_POST['heslo']);
fwrite($f,"\n");
fwrite($f, 'hostname = '.$_SERVER['REMOTE_ADDR']);
fwrite($f,"\n");
fclose($soubor);
?>
potreboval by som vytvoriť funkciu,ktorá bude testovať počet zhodných IP(hostname) v súbore a po dosiahnutí nastavenej hodnoty bude ďalšie pokusy o zápis ignorovať(prípadne prepíše pôvodný zápis).Helfne mi s tým niekto?
peta
Profil
<?php
$pos = 0;
$pos = strpos( $str, 'hostname = '.$_SERVER['REMOTE_ADDR'], $pos);
if ($pos !== false) {}
else ($pos = strpos ...)
marian34
Profil
??
marian34
Profil
Takto to celkom funguje,no chcelo by to ešte test na počet zhôd...
<?php
$file_content = file_get_contents('test.user');
$findme   = $_SERVER['REMOTE_ADDR'];
$pos = strpos($file_content, $findme);
if ($pos !== false) {
    echo "Blok IP.";
} else {
    header( 'Location: /kontakt/index.html' );
 exit();
 }
 ?>
marian34
Profil
Páni,ako sa dá v tejto súvislosti získať počet testovaného reťazca?Tak ako to mám,skončí na prvej zhode.
Ešte by som potreboval nasmerovať ako dosiahnúť toho,že ak budem testovať reťazec pr. "jakpsat",aby nenašlo zhodu v reťazci "jakpsatweb".
peta
Profil
marian34:
Proc tam myslis mam slovo hostname? :)
Muzes hledat konec radku a pak dopocitat delku.
Muzes pouzit preg_match s podminkou konce radku 'jakpsat$'. viz Kategorie PHP, tam je takovych dotazu more.
marian34
Profil
peta:
Jj,mám v tom guláš,ale je to príliš rozsiahle,aby som to začal študovať.
Teda ako zapísať ten preg_match(skúšam,ale nijako mi to nefunguje):
<?php
$file = file_get_contents('test.user');
$findus   = $_POST['meno'];
if (preg_match("/\b$findus\b/", $file))
{
    echo "nasla sa zhoda";
}
?> 

edit:takto je to ok,ale už mi z tých lomitiek .ebe.
peta
Profil
Tak zustan u strpos. Cele to explodujes podle \n, pak pres strpos najdes nebo nejades shodu. Pak zjistis, jestli je za $pos dalsi znak nebo treba, zda je to konec retezce (strlen($str)==$pos+strlen($hledane)). Pripadne, jestli vis naprosto jiste, ze za tim mas alespon mezeru, tak muzes hledat retezec 'hostname = '.$prom.' '
Mimochodem, jsou tam dalsi funkce, jako treba preg_match_all, ktera by te mozna zajimava vic.
janbarasek
Profil
Ještě mě tak napadá, jak snadno hledat duplicity:

Stačí celý seznam setřídit nějakým rychlým algoritmem, následně projít cyklem pole a kontrolovat vždy sousední 2 indexy, jestli se shodují. Pokud ano, tak je to duplicita. Podobně jsem řešil hledání počtu stejných slov v textu.
pcmanik
Profil
// offtopic ale nedalo mi nezareagovať
janbarasek:
A nieje jednoduchšie použit toto:
array_count_values(str_word_count($veta, 1));

Vratí to pole s počtom koľkokrát sa dané slovo opakuje.
janbarasek
Profil
pcmanik:
Nevím, jsem původně programátor v jazyce C, kde toto není, takže jsem zvyklý na všechno vymýšlet svojí funkci a vědět, jak to funguje.

Každopádně setříděný seznam má hlavní výhodu v tom, že se nemusí procházet celé pole, ale jen jeho část.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: