Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] zmiana linii w pliku tekstowym
Forum PHP.pl > Forum > Przedszkole
rybosom
mam plik tekstowy test.txt
Kod
11111111111111111
22222222222222222
33333333333333333
44444444444444444
55555555555555555


chcę linijkę nr 3 zmienić z 33333333333333333 na 11111111111111111 i chcę to zrobić w następujący sposób:

  1. $data = fopen('test.txt','r');
  2. $temp = fopen('temp.txt','a');
  3. $x = 11111111111111111;
  4. flock($temp, 2);
  5. while(!feof($data)){
  6. $linia = fgets($data);
  7. $_temp = explode('\n',$linia);
  8. $nr = rtrim($_temp[0]);
  9. if($nr == $x){
  10. $linia = $x;
  11. }
  12. }
  13. flock($temp, 3);
  14. fclose($data);
  15. fclose($temp);
  16. unlink('test.txt');
  17. rename('temp.txt','test.txt');


jednakże mimo, że teoretycznie powinno to działać to tak nie jest. Gdzie zrobiłem błąd?
Michael2318
Po pierwsze to chyba nie tak:

  1. $x = 11111111111111111;


a tak:

  1. $x = '11111111111111111';


Ale nie napisałeś co się dzieje konkretnie. Jakiś błąd jest? Czy po prostu nie wykonuje wskazanej operacji, ale błędu jako tako tekstowego żadnego nie wypluwa? Może zamienia, ale nie to co trzeba? snitch.gif Opisz dokładniej co się dzieje.
rybosom
w efekcie powstaje pusty plik test.txt
Michael2318
Ja zrobiłem to tak u siebie i śmiga:

  1. <?php
  2.  
  3. $text = ''; // znacznik na start ma być pusty
  4. $zamien_na = "11111111111111111"; // tekst na który ma zostać zamieniona dana linia
  5. $numer_linii = 3; // numer linii, która ma zostać zamieniona
  6. $nazwa_pliku = "test.txt"; // nazwa pliku, na którym PHP ma wykonać operację
  7.  
  8. $uchwyt = fopen($nazwa_pliku, "r");
  9. if ($uchwyt)
  10. {
  11. $i = 0;
  12. while (($bufor = fgets($uchwyt, 4096)) !== false)
  13. {
  14. $i++;
  15.  
  16. if ( $i == $numer_linii )
  17. {
  18. $text .= $zamien_na."\r\n";
  19. }
  20. else
  21. {
  22. $text .= $bufor;
  23. }
  24. }
  25. if (!feof($uchwyt))
  26. {
  27. echo "Błąd: niespodziewany błąd fgets()\n";
  28. }
  29. fclose($uchwyt);
  30. }
  31.  
  32. file_put_contents($nazwa_pliku, $text);
  33.  
  34. ?>
rybosom
rzeczywiście działa, a ja zafiksowałem się na unlink smile.gif

ps masz +
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.