Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wczytywanie pliku wierszami od końca
Forum PHP.pl > Forum > Przedszkole
simperium
zastanawiam się, czy jest może na to jakaś konkretna komenda, by dane z pliku tekstowego były wczytywane wierszami od końca, czyli dla:
Cytat
to jest zdanie 1
to jest zdanie 2
to jest zdanie 3


zostały wczytane tak:
  1. to jest zdanie 3
  2. to jest zdanie 2
  3. to jest zdanie 1


Na razie załatwiam to metodą łopatologiczną, a więc wpierw każdemu z wierszy nadaję inną zmienną, a potem te zmienne wczytuję właśnie od końca.
Oczywiście sprawdza się to przy małych plikach, ale przy dużych - w sytuacji, gdy chcę wczytać np. tylko ostatnie 3 wiersze i to od ostatniego począwszy, taki kod traci sens.

Będę wdzięczny za pomoc.
smile.gif
simperium
no tak, ale ksort działa tylko na tablicach?
A co jeśli jest sytuacja, że chcę, by na stronie głównej pojawiły się trzy ostatnie wiersze (ale począwszy od ostatniego) z 5 plików, gdzie każdy z nich (tj. plików) waży np po 400kb i ma 6tys wierszy?

Gdybym to wszystko powczytywał do tablic, to chyba serwer padłby w dosyć szybkim czasie?
sowiq
Chcesz zajeździć serwer, który ma pewnie koło 8 GB RAM'u plikami po 400 KB? Powodzenia smile.gif Przecież skrypt wykonuje się w ekstremalnym przypadku kilka sekund (w normalnym kilkanaście milisekund), a nie godzinę. Od razu po wykonaniu skryptu pamięć przez niego zajmowana jest zwalniana.
piotrooo89
tak jak napisał ~sowiq jak nie zrobisz jakiegoś ekstremalnego błedu to kilka sekund i po sprawie.
tornax
Cytat(simperium @ 28.04.2009, 15:51:53 ) *
no tak, ale ksort działa tylko na tablicach?
A co jeśli jest sytuacja, że chcę, by na stronie głównej pojawiły się trzy ostatnie wiersze (ale począwszy od ostatniego) z 5 plików, gdzie każdy z nich (tj. plików) waży np po 400kb i ma 6tys wierszy?

Gdybym to wszystko powczytywał do tablic, to chyba serwer padłby w dosyć szybkim czasie?


To nie do końca jest tak, że serwera nie można zajechać chociaż było by to bardzo trudne. Nie powinniśmy zawsze pisać nie optymalnie (file, krsort) tylko dlatego że tak jest łatwiej, pytanie co masz w plikach, jak często będę odczytywane, a jeżeli często to być może opłaca się dane przenieść do bazy z której bardzo łatwo można wyciągnąć takie rzeczy jak 3 ostatnie rekordy.

Faktycznie tak małe pliki nie stanowią problemu, ale jeżeli ich wielkość zacznie osiągać parę MB a ruch na serwerze będzie spory to takie rozwiązanie nie jest wskazane.

Innym rozwiązaniem mogło by być dopisywanie danych na początku pliku i odczytywanie, z użyciem uchwytów do plików, 3 pierwszych linijek. trochę więcej zachodu przy pisaniu ale nie wgrywasz całych plików do RAMu

Kolejne, możesz zrobić prosty system (funkcja) cache, wyciągnąć te 3 linijki z dużego pliku i zapisać je w mniejszym. Teraz niech funkcja sprawdza czy duży plik był modyfikowany jeżeli nie to niech pobierze te 3 linijki z małego pliku, jeżeli był to niech pobierze 3 ostatnie linijki z dużego pliku skasuje mniejszy plik ze starymi 3 linijkami i utworzy nowy w którym będą te linijki zaktualizowane


Nie ma uniwersalnego rozwiązania wszystkie są zależne od wymagań i oczekiwań
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.