Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]fopen i funckje pokrewne
Forum PHP.pl > Forum > Przedszkole
JakubBab
Czesc,

Jak ustawic fseek tak zeby za kazdym razem jak funkcja jest wywolywana przechodzil na nastepny offset ? Probowalem ustawic licznik ale na podstawie czego? musialbym dolozyc osobna funkcje np. licznik odwiedzin i warunki. Moze jest cos przystepniejszego?

W przykladzie, zalozlmy ze jest slowo "foooo" i chce go zmienic na "uuuuu" ale progresywnie za kazdym wywolaniem funkcji. (1 odswiezenie strony "uoooo", 2 odswiezenie "uuooo" etc.)Kod ponizej. Fenks from de mauntejn.

  1. function changeLetter(){
  2.  
  3.  
  4. if(($fp = fopen("file_me.txt", "r+"))==FALSE)
  5. return false;
  6.  
  7.  
  8. $t = fgets($fp);
  9. if($t <=5){
  10. fseek($fp,0);
  11. fwrite($fp, "u");
  12. fclose($fp);
  13. }
  14. return $t;
  15.  
  16.  
  17. }
  18. echo (changeLetter());
Pyton_000
Musisz gdzieś trzymać offset np. w innym pliku/bd
Wczytujesz sobie plik,
potem robisz na stringu:
  1. $chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);

podmieniasz znak i zapisujesz do pliku. No i oczywiście aktualizujesz offset
JakubBab
Nie ruszylem przykladu ale fajne rozwiazanie. Niemniej jednak z tego co widze to nie ma tutaj automatyzacji bo trzeba "recznie" podmieniac offset.


Pyton_000
No taaaa...

$offset++
JakubBab
Dzieki miszczu. Odpisalem pozno i musze przyznac, ze nie myslalem. Przyklad ponizej. Moze sie komus, kiedys przyda

  1.  
  2. function writeLetter(){
  3.  
  4.  
  5. if(($fp = fopen("swoj_plik.txt", "r+"))==FALSE)
  6. return false;
  7.  
  8.  
  9. //offset
  10. $os = fopen("offset.txt","r+");
  11. $o = fgets($os);
  12. if($o==5){
  13. $o=0;
  14. fseek($os,0);
  15. fputs($os,$o);
  16. fclose($os);
  17. }else{
  18. $o = $o+1;
  19. fseek($os,0);
  20. fputs($os,$o);
  21. fclose($os);
  22. }
  23.  
  24. // plik z tekstem
  25. $t = fgets($fp);
  26. if($t <=5){
  27. rewind($fp);
  28. fseek($fp,$o);
  29.  
  30.  
  31.  
  32. fwrite($fp, "h");
  33. fclose($fp);
  34. }
  35.  
  36. return $t;
  37.  
  38.  
  39. }
  40. echo (writeLetter());
Pyton_000
Ło matko....

To tak na szybko nie sprawdzane zamiast Twoich wypocin...
  1. $string = preg_split('', file_get_contents('slowo.txt'));
  2. $offset = file_get_contents('offset.txt');
  3. $offset = !isset($offset) ? 0 : ((int)$offset) % 5;
  4.  
  5. $string[$offset++] = 'h';
  6.  
  7. file_put_contents('slowo.txt', implode('', $string));
  8. file_put_contents('offset.txt', $offset);
JakubBab
Dzieki Pyton. W pierwszej linijce brakuje tylko forwardslashy tak jak dales w komentarzu wyzej.

Milo popatrzec na kod jaki piszesz. Widac doswiadczenie ( po czasie odpisania rowniez). Na tym polega nauka, ze popelnia sie bledy i pisze kod taki jaki ja. Dla jednych to process przez który nabiera sie umiejetnosci o ktorych nie wiedzialo sie wczesniej a dla drugich to wypocina.

Osobiscie wole Twoja wersje. Tutaj poprawiona poprzednia wersja - troche czysciej -

  1.  
  2. if(($fp = fopen("slowo.txt", "r+"))==FALSE)
  3. return false;
  4.  
  5. $os = fopen("offset.txt","r+");
  6. $o = fgets($os);
  7. $o = ($o==5)? $o=0 : $o = $o+1;
  8. fseek($os,0);
  9. fputs($os,$o);
  10. fclose($os);
  11.  
  12.  
  13. $t = fgets($fp);
  14. rewind($fp);
  15. fseek($fp,$o);
  16. fwrite($fp, "h");
  17. fclose($fp);


Pozdr,
Pyton_000
Doświadczenie, i wiedza jakie funkcje posiada PHP jest bezcenna. Możesz nie wiedzieć jakie parametry i w jakiej kolejności są ale dobrze wiedzieć że jest jakaś funkcja która robi coś tam i do czego można tego używać.

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.