Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapisanie haseł do pliku .txt
Forum PHP.pl > Forum > PHP
eremen
  1. for ($i=0;$i<50;$i++) <<- wymyśliłem że to sprawi że będzie 50 wygenerowanych kodów ;)
  2. {
  3. $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
  4. $kod = '';
  5. for ($i=0; $i<5; $i++) // 5 to długość ciągu
  6. {
  7. $kod .= $znaki[rand()%(strlen($znaki))];
  8. }
  9. }


mam funkcję generującą kod i chciałbym aby były one zapisywane do pliku kody.txt(pewnie fopen() fwrite() fclose() - tylko nie wiem jak to umieścić w kodzie ;/ ) i jak zrobić żeby kody się nie powtarzały?


zrobiłem tak:
  1. for ($i=0; $i<50; $i++){
  2. $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
  3. $kod = '';
  4. $fileHandler=fopen("kody.txt","w"); <<- tu otwieram plik
  5. for ($i=0; $i<5; $i++) // 5 to długość ciągu
  6. {
  7. $kod .= $znaki[rand()%(strlen($znaki))];
  8. fputs($fileHandler,$kod); <<- tu zapisuję kod za każdym z 50 razy
  9. }
  10. fclose($fileHandler); <<- tu zamykam
  11. }

jednak jest to źle... jak to mam w kodzie to strona się nie otwiera tylko cały czas ładuje ;]
mortus
Najpierw wygeneruj sobie kody i zapisz je do tablicy, a później przy użyciu file_put_contents() i implode() zapisz plik:
  1. for($i = 0; $i < 50; $i++) {
  2. // tutaj generujemy pojedynczy kod
  3. $codes[] = $code; // a tutaj zapisujemy go do tablicy
  4. }
  5. file_put_contents('codes.txt', implode(PHP_EOL, $codes));

Do sprawdzenia, czy kod się nie powtarza, trzeba użyć pętli w pętli.
eremen
PHP_EOL to to samo co <br/>?smile.gif


  1. for ($i=0; $i<50; $i++){
  2. $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
  3. $kod = '';
  4. for ($i=0; $i<5; $i++) // 5 to długość ciągu
  5. {
  6. $kod .= $znaki[rand()%(strlen($znaki))];
  7. }
  8. $kod[] = $kod; <<-- błąd taki: Fatal error: [] operator not su
  9. }
  10. file_put_contents('kody.txt', implode(PHP_EOL, $kod));


chyba coś źle kombinuję z tym...
gothye
PHP_EOL to \n

po za tym umieść to w pliku .php + jakąś zdefiniowaną stałą inaczej dane będą dostępne z poziomu www do pliku .txt
mortus
PHP_EOL to znak końca linii właściwy dla systemu operacyjnego. W ostatniej instrukcji implodujesz tablicę kodów $codes, a nie pojedynczy kod $kod (mam nadzieję, że widzisz błąd).

@DOWN: Widzę, że zmieniłeś kod. Zmienna $kod nie może być jednocześnie tablicą i łańcuchem znaków. Jeśli już to:
  1. $kody[] = $kod;

i $kody podajesz jako drugi argument funkcji implode().
eremen
mam to w pliku .php , ale nie wiem jak utworzyć zdefiniowaną stałą... z resztą myślę że ochrona przed włamaniem nie będzie puki co potrzebna bo to tylko zadanie na praktyki wink.gif
... dość skomplikowane zadanie - to tylko część ;]

Cytat(mortus @ 19.02.2012, 13:17:06 ) *
PHP_EOL to znak końca linii właściwy dla systemu operacyjnego. W ostatniej instrukcji implodujesz tablicę kodów $codes, a nie pojedynczy kod $kod (mam nadzieję, że widzisz błąd).


czyli muszę utworzyć zmienną $code nad pierwszym for? na tej samej zasadzie co $kod nad drugim for? tak to biorę na logikę ;]

na tej zasadzie:
  1. $code = '';
  2. for ($i=0; $i<50; $i++){
  3. $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
  4. $kod = '';
  5. for ($i=0; $i<5; $i++) // 5 to długość ciągu
  6. {
  7. $kod .= $znaki[rand()%(strlen($znaki))];
  8. }
  9. $codes[] = $code; // a tutaj zapisujemy go do tablicy
  10. }
  11. file_put_contents('codes.txt', implode(PHP_EOL, $codes));
mortus
Nie no, wygenerowany kod zapisujesz w tablicy (tablice w PHP deklarujemy np. poprzez nawiasy kwadratowe []) kodów:
  1. for ($i=0; $i<50; $i++) {
  2. $znaki = '1234567890qwertyuiopasdfghjkklzxcvbnm';
  3. $kod = '';
  4. for ($i=0; $i<5; $i++) // 5 to długość ciągu
  5. {
  6. $kod .= $znaki[rand()%(strlen($znaki))];
  7. }
  8. $kody[] = $kod; // a tutaj zapisujemy go do tablicy
  9. }
  10. file_put_contents('codes.txt', implode(PHP_EOL, $kody));


EDIT:
Skoro to na praktyki, to kolejne odpowiedzi będą tylko podpowiedziami.
eremen
Cytat(mortus @ 19.02.2012, 13:28:40 ) *
Skoro to na praktyki, to kolejne odpowiedzi będą tylko podpowiedziami.

biggrin.gif mogłem się nie sprzedawać, a tak serio to takie podawanie kodu krok po kroku też dobrze uczy wink.gif bo wcześniej próbowałem zrobić to na podstawie jakiegoś kodu z internetu ale tak się zagmatwałem że postanowiłem od zera na nowo...

co do kodu to robię tak jak podałeś i strona pewien czas się ładuje po czym wyskakuje błąd i nie widać nawet sondy.

chyba chodzi o to że generuję za dużą pojemność pliku Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in
Błąd wyskakuje w linii gdzie jest tablica
CuteOne
Bo dwa razy inkrementujesz $i

  1. for($i=1;$i<=50;$i++) {
  2.  
  3. for($x=1;$x<=5;$x++) {
eremen
witam smile.gif
trochę przerobiłem kod bo chciałem żeby hasła się nie powtarzały najprostszą metodą
  1. for ($s=0; $s<50; $s++){
  2. srand((double)microtime()*1000000);
  3. $kod=md5(uniqid(rand()));
  4. $kody[] = $kod; // a tutaj zapisujemy go do tablicy
  5. }
  6. file_put_contents('./kody.txt', implode(PHP_EOL, $kody));

ale mam problem ponieważ chciałbym żeby hasła miały 5 znaków a mają więcej, nie wiem jak to zmienić...

hehe działa biggrin.gif

zrobiłem tak:
  1. for ($s=0; $s<50; $s++){
  2. srand((double)microtime()*1000000);
  3. $kod=md5(uniqid(rand()));
  4. // obliczamy ilość znaków w tekscie
  5. $licz = strlen($kod);
  6. // sprawdzamy, czy ilość znaków w tekscie jest większa
  7. // lub równa liczbie znaków po jakiej tekst ma być obcięty
  8. if ($licz>=5)
  9. {
  10. // obcinamy tekst o określoną ilośc znaków
  11. $txt = substr($kod,0,5);
  12. }
  13. else
  14. {
  15. // jeżeli warunek nie jest spełniony pozostawiamy tekst bez zmian
  16. $txt = $kod;
  17. }
  18.  
  19. $kody[] = $txt; // tutaj zapisujemy okrojony kod do tablicy
  20.  
  21. }
  22. file_put_contents('./kody.txt', implode(PHP_EOL, $kody));
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.