Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dopisywanie do pliku
Forum PHP.pl > Forum > Przedszkole
musiek86
Witam mam takie pytanie, czy istnieje mozliwość dopisywania danych do pliku w konkretnym miejscu? Np chciałbym by pewne dane były dopisane po pewnej konkretnej fazie.
Dla przykładu, mam plik z treścią:
  1. <category "Glowne">
  2. <room "towarzyski">
  3. Description "opis"
  4. </room>
  5. <room "tematyczny">
  6. Description "opis"
  7. </room>
  8. </category>
  9.  
  10. <category "muzyka">
  11. <room "radiostacja">
  12. Description "opis"
  13. </room>
  14. </category>
  15.  
  16. <category "erotyczne">
  17. <room "erotyczny">
  18. Description "Popis"
  19. </room>
  20. </category>

Np po wystąpieniu frazy
  1. <room "tematyczny">
  2. Description "opis"
  3. </room>

chcę dopisac dane pobrane z formularza powiedzmy:
  1. <room "$nazwa_pokoju">
  2. Description "$opis"
  3. </room>

Założenie jest takie ze dopisywane dane nie zawsze są na koncu pliku bo fraza po ktorej ma nastąpic dopisanie raz bedzie w okolicach poczatku pliku a raz w srodku.
Da sie to ogarnąć?
tolomei
Witaj.

Jest funkcja fseek(), która po otworzeniu pliku może ustawić wskaźnik na konkretnym bajcie i tam rozpocząć dopisywanie. Problemem jest jednak znalezienie tego miejsca gdzie chcesz dopisywać. Moim zdaniem ta opcja odpada.

Można też pobrać zawartość pliku z file_get_contents() i dodać nowy produkt z preg_replace() przykładowo. Następnie zapisać plik ponownie.

Innym pomysłem, który mógłby wypalić jest użycie funkcji file() do odczytania pliku. Zwraca ona tablicę, gdzie każdy element jest jedną linią pliku. Następnie używając funkcji preg_grep() możesz znaleźć konkretną linię po której chcesz dopisywać. Dodajesz swoje dane i zapisujesz plik ponownie.

Na nic innego nie wpadłem.

Pozdrawiam.
mstraczkowski
W przypadku dużych plików funkcja file, odpada bo może szybko zjeść całą dostępną pamięć.
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.