Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Odczyt z pliku
Forum PHP.pl > Forum > Przedszkole
bolek1
Witam,
napotkałem problem dotyczący odczytu poszczególnej linii z pliku tekstowego. Postanowiłem użyć do tego funkcji file, która każdy element potraktuje jako osobny wiersz z pliku.

plik.txt
  1. 5 //linia pierwsza
  2. 7 //linia druga
  3. 9 //linia trzecia
  4. 1 //linia czwarta


odczyt.php
  1. <?$plik=file("plik.txt");
  2. print_r($plik);
  3. $plik[2]=4;
  4. fwrite ($plik[2]);
  5. fclose($plik);
  6. ?>


W tym kodzie u góry wywala mi błędy:
Wrong parameter count for fwrite() in ...
Warning: fclose(): supplied argument is not a valid stream resource in ...

Chodzi mi o to by ten kod odczytywał trzecią linię i jej wartość zamieniał na np.4.
Spawnm
aby użyć fwrite musisz wcześniej dać fopen.
użyj file_get_contents" title="Zobacz w manualu PHP" target="_manual

ew. całość zrób pod fopen
bolek1
  1. <?
  2. $plik=file("plik.txt");
  3. print_r($plik);
  4. $plik[5]=3;
  5. fopen("plik.txt",'r+');
  6. fwrite ($plik[5]);
  7. fclose($plik);
  8. ?>


Nadal zwraca te same błędy ...
Co poprawić ?
Fifi209
Poczytaj jakie parametry przyjmuje fwrite.
bolek1
  1. <?
  2. $plik=file("plik.txt");
  3. print_r($plik);
  4. $tab[5]=3;
  5. fopen("plik.txt",'r+');
  6. fwrite ($plik,$tab[5]);
  7. fclose($plik);
  8. ?>


Błędy:Warning: fwrite(): supplied argument is not a valid stream resource in
Warning: fclose(): supplied argument is not a valid stream resource in

Co jeszcze poprawić ?
Fifi209
Wynik fopen musisz przypisać do zmiennej i tą zmienną w fclose wrzucić... czytaj dokumentację
bolek1
  1. <?$plik=file("plik.txt");
  2. print_r($plik);
  3. $tab[3]=8;
  4. $zmiana=fopen("plik.txt",'r+');
  5. fwrite ($zmiana,$tab[3]);
  6. fclose($zmiana);
  7. ?>


Teraz nie wywala już błędów, ale niestety nie zmienia wartości indeksu 3.

W czy tkwi błąd ?
Spawnm
zastanów się nad sensem tego kodu:
  1. <?php
  2. $plik=file("plik.txt");
  3. print_r($plik);
  4. $tab[3]=8;
  5. ?>
bolek1
  1. <?php
  2. $plik=file("plik.txt"); //wczytuje do tablicy
  3. print_r($plik); //wyswietla zawartosc tablicy
  4. $tab[3]=8; //  indeksowi 3 przypisuje wartosc 8
  5. ?>


To moja interpretacja. Co jest źle ?winksmiley.jpg
hedrazer
zle jest to, ze zmieniasz zawartość 4 indeksu tablicy $tab, która jest PUSTA
tak w skrócie.

EDIT:
  1. <?php
  2. $_filename = "./plik.txt";
  3.  
  4. // odczytujemy zawartosc pliku
  5. $handle = fopen($_filename, "r");
  6. $data = fread($handle, filesize($_filename));
  7. fclose($handle);
  8.  
  9. $_array = split("\n", $data); // ladujemy zawartosc do tablicy (dzielimy wg. znaku nowej linii)
  10. $_count = count($_array)-1;
  11.  
  12. // zmieniamy zawartość 3 linii (przy zalozeniu ze numerujemy od 0)
  13. $nr_linii = 3; // liczona od 0 (takze w tym momencie zmienimy 4 linię)
  14. $wartosc  = 123;
  15.  
  16. if($nr_linii <= $_count) { // jezeli nr linii jest mniejszy równy liczbie wszystkich linii w pliku
  17.    // wykonujemy zmianę wartości
  18.    $_array[$nr_linii] = $wartosc;
  19.  
  20. // zapisujemy wynik naszego dzialania...
  21.    $handle = fopen($_filename, "w");
  22.    for($i=0; $i < $_count; $i++) {
  23.        fwrite($handle, $_array[$i]."\n");
  24.    }
  25.    fclose($handle);
  26. }
  27. ?>


napisane na szybko, nalezy dodać tu jeszcze chmod'y i powinno działać ok...
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.