Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów
sprawdzanie w pliku czy string się powtarza - Wersja do druku

+- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl)
+-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www)
+--- Dział: Programowanie, Bazy danych (https://www.webmastertalk.pl/forum-programowanie-bazy-danych)
+--- Wątek: sprawdzanie w pliku czy string się powtarza (/thread-sprawdzanie-w-pliku-czy-string-sie-powtarza)



sprawdzanie w pliku czy string się powtarza - eremen - 19-02-2012

mam kod generujący 50 haseł i zapisujący je do pliku jeden pod drugim:
Kod:
for ($s=0; $s<50; $s++){
    $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
    $kod = '';
    for ($i=0; $i<5; $i++) // 5 to długość ciągu
    {
        $kod .= $znaki[rand()%(strlen($znaki))];
    }
    $kody[] = $kod; // a tutaj zapisujemy go do tablicy
}
file_put_contents('./kody.txt', implode(PHP_EOL, $kody));

chciałbym udoskonalić go tak aby nie pozwalał na tworzenie dwóch takich samych haseł w pliku
ktoś mi doradził żebym to zrobił za pomocą pętli w pętli ale nie bardzo mam pojęcie jak to zrobić.
Czy mógłby mi to ktoś wytłumaczyć ale naprawdę "łopatologicznie" bo z php dopiero zaczynam, albo podać swój sposób na zrobienie tego?Wink


RE: sprawdzanie w pliku czy string się powtarza - Pedro84 - 20-02-2012




RE: sprawdzanie w pliku czy string się powtarza - eremen - 20-02-2012

a jeśli zastosuję tą funkcję i np. będzie powtarzało się jakies hasło to samo zostanie zastąpione innym czyli nadal będzie 50? Czy 49 (- to jedno które się powtórzyło)?


RE: sprawdzanie w pliku czy string się powtarza - Pedro84 - 20-02-2012

Zwróci tylko unikalne. Jeśli chcesz sobie zastąpić, to po prostu dorób sobie zwykłego ifa sprawdzającego liczbę indeksów w tablicy przed i po czysczeniu.


RE: sprawdzanie w pliku czy string się powtarza - eremen - 20-02-2012

Kod:
for ($s=0; $s<50; $s++){
    $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
    $kod = '';
    for ($i=0; $i<5; $i++) // 5 to długość ciągu
    {
        $kod .= $znaki[rand()%(strlen($znaki))];
    }
    $kody[] = $kod; // a tutaj zapisujemy go do tablicy
    $kody[] = array_unique($kody);
}
file_put_contents('./kody.txt', implode(PHP_EOL, $kody));
zrobiłem tak jednak jak otwieram plik w którym sie zapisują hasła co drugi wers jest napis 'array'... hmm ;]


RE: sprawdzanie w pliku czy string się powtarza - Pedro84 - 20-02-2012

1. Najpierw generujesz sobie kody
2. Zapisujesz do tablicy
3. Przejeżdżasz array_unique()
Kod:
$kody = array(); // tu sobie pobierasz czy to z pliku czy jak tam chcesz
$kody[] = array_unique($kody);
if( count($kody) < 50 )
{
    $result = $kody;
}
else
{
    // dodatkowe generowanie kodów
}
4. Zapisujesz do pliku: http://php.net/manual/en/function.file-put-contents.php

A najlepiej to sobie ten skrypt generowanie przerób tak, żeby generował Ci unikalne kody.


RE: sprawdzanie w pliku czy string się powtarza - eremen - 20-02-2012

no ok, zrobiłem takie coś (zrobiłem heh... znalazłem w necie Wink ):
Kod:
for ($s=0; $s<50; $s++){
    srand((double)microtime()*1000000);
    $kod=md5(uniqid(rand()));
    $kody[] = $kod; // a tutaj zapisujemy go do tablicy
}
file_put_contents('./kody.txt', implode(PHP_EOL, $kody));
jak widać jest to kod troszkę krótszy ;] przeszkadza mi w nim tylko to że nie wiem jak zrobić żeby generowane hasła miały nie mniej nie więcej tylko 5 cyfr
haha zrobiłem tak i działa Big Grin
Kod:
for ($s=0; $s<50; $s++){
    srand((double)microtime()*1000000);
    $kod=md5(uniqid(rand()));
    // obliczamy ilość znaków w tekscie
    $licz = strlen($kod);
    // sprawdzamy, czy ilość znaków w tekscie jest większa
    // lub równa liczbie znaków po jakiej tekst ma być obcięty
    if ($licz>=5)
    {
        // obcinamy tekst o określoną ilośc znaków
        $txt = substr($kod,0,5);
    }
    else
    {
        // jeżeli warunek nie jest spełniony pozostawiamy tekst bez zmian
        $txt = $kod;
    }
    
    $kody[] = $txt; // tutaj zapisujemy okrojony kod do tablicy

}
file_put_contents('./kody.txt', implode(PHP_EOL, $kody));



RE: sprawdzanie w pliku czy string się powtarza - marcin006 - 20-02-2012

Nie lepiej było by zamienić pętle for na np while i po losowaniu sprawdzić czy w tablicy nie istnieje żądana wartość, jeżeli nie dodajesz, zwiększasz jakiś licznik i jedziesz dalej, jeżeli istnieje olewasz i jedziesz dalej aż do osiągnięcia wartości licznika równej ilości wygenerowanych haseł...?


RE: sprawdzanie w pliku czy string się powtarza - Pedro84 - 20-02-2012

(20-02-2012, 02:13)marcin006 napisał(a): Nie lepiej było by zamienić pętle for na np while i po losowaniu sprawdzić czy w tablicy nie istnieje żądana wartość, jeżeli nie dodajesz, zwiększasz jakiś licznik i jedziesz dalej, jeżeli istnieje olewasz i jedziesz dalej aż do osiągnięcia wartości licznika równej ilości wygenerowanych haseł...?
Najlepiej to by było zrobić tak jak we wcześniejszym poście napisałem: generować unikalne znaki i dla pewności przejeżdżać array_unique(), potem ewentualnie dodać nowe generowane, jeśli były jakieś duplikaty.


RE: sprawdzanie w pliku czy string się powtarza - eremen - 20-02-2012

to co proponujesz ma sens i jest na pewno lepsze niż to co sam skleciłem ale długo musiał bym się z tym babrać żeby zrobić... a mam jeszcze parę innych wytycznych dotyczących hasła i wgl całej tej sondy ;]