|
Jak w prawidłowy sposób czytać parametry zapisane w pliku w liniach ? |
Wiele programów w PHP potrzebuje podręcznej bazy danych. Dane można zapisać w tablicy. Ale jak taką tablicę zapisać w pliku.
Jednym z rozwiązań jest serializacja danych i zapisanie ich do pliku lub zastosowanie zapisu w plikach z rozszerzeniem .ini (wtedy korzystamy z funkcji parse_ini_file)
Jednak początkujący webmasterzy często chcą zapisywać dane w zwykłym pliku, do którego chcą mieć dostęp z poziomu FTP.
Np. w każdej linii jeden parametr.
Często jednak podczas zapisywania parametru możemy niechcący dodać do niego puste linie, spacje, tabulacje i inne białe znaki nawet nie będąc świadomymi że to robimy.
Tak się dzieje często gdy stosujemy np. najpopularniejszy notatnik z windows...
Załóżmy, że dla przykładu naszymi parametrami będą proste słowa (ala,kot,pies,elementarz PHP)
Najpierw zastosujemy zwykłą tablicę bez zapisu w pliku...
A teraz zastosujemy prosty skrypt, który wyczyści nam tą tablicę z białych znaków i pustych wartości....
Przedstawiony skrypt zadziała dla kazdej tablicy....
ale wracamy do naszego głównego wątku - jak czytać dane z pliku w którym mogą być niepotrzebne białe znaki i puste linie...
a właśnie najczęściej z tym problemem spotykamy się gdy stosujemy pliki tekstowe do przechowywania danych.
Webmasterzy nieraz przechowują dane w plikach tekstowych i zapisują je w formie linii tworząc w ten sposób jakąś bazę danych.
Załóżmy, że wpiszemy w nawiązaniu do powyższego przykładu do pliku o nazwie jakis_plik.txt następującą zawartość:
Zauważ że tu też czwarty element to pusta linia złożona z samych spacji... oraz tak samo jak wcześniej pododawaliśmy spacje do różnych linii na końcu i na poczatku...
Poprostu nasz plik zawiera dane takie same jak przykładowa tablica z pierwszego przykładu....
Po odczytaniu takiego pliku funkcją file otrzymamy odrazu tablicę z danymi (identyczną w zawartości jak ta z pierwszego przykładu). Oto jak ją odczytamy:
... ponieważ w pliku jakis_plik.txt jest 5 linii otrzymamy 5 elementów tablicy...
Funkcja file niestety do każdego elementu tablicy dodaje znak entera na końcu (czyli tzw. przejście do nowej linii).
Taka tablica zawiera te znaki na końcu każdej wartości... jak pozbyć się tych znaków z tak odczytanej tablicy?
Są dodatkowe parametry, które wyłączają dodawanie białych znaków oraz pomijanie pustych linii ale ich nie zastosujemy - przeczytaj dalej dowiesz się dlaczego...
Oto sposób bez stosowania dodatkowych parametrów w funkcji file:
Skrypt również eliminuje z tablicy puste linie. Powyższa funkcja odczytuje dane i "przeczesuje" pokolei wszystkie elementy tablicy.
Jeśli jakiś element jest pusty to go pomija.
Również kasuje każdy biały znak z początku i z końca każdego elementu tablicy.
Tak otrzymana tablica wynikowa nie zawiera już pustych linii i jest oczyszczona z białych znaków.
Funkcja file działa podobnie do file_get_contents(), tylko że file() zwraca plik w formie tablicy.
Każdy element tablicy odpowiada linii w pliku.
Funkcja na końcu każdego elementu tablicy dodaje zawsze znak nowej linii.
Jeśli jakaś linia będzie pusta lub będzie zawierała spacje to niestety też zostaną one wczytane do tablicy jako kolejne elementy
a do każdej z tych linii też zostanie dodany znak entera.
W przypadku błędu (jeśli plik nie zostanie odnaleziony), funkcja file() zwraca FALSE.
Dodawanie enterów na końcu każdego znaku mozna wyłączyć w tej funkcji. Również można wyłączyć pobieranie pustych linii. Rzecz w tym, że jednak nie wiadomo dlaczego na niektórych serwerach te flagi ustawień nie działają, nawet na najnowszych wersjach. Stąd powyższe rozwiązanie.
Opcjonalnych parametrów funkcji file może być od 1 do 3 (rozdzielone przecinkami).
Oto te parametry:
Przewidujemy, że powyższy błąd występujący w PHP zostanie dość szybko usuniety przez twórców PHP więc w przyszłości będzie można poprostu zastosować zamiast takiego zapisu:
... taki oto krótki zapis:
Szczegółowa analiza skryptu