dodaj tą stronę do ulubionych     
użytkownicy online 25, liczba odwiedzin: 1251955
książki i porady dla programistów i webmasterów porady dla budujących strony internetowe i webmasterów jezus jest królem polski wagi

dołącz do modlących się o cud

poradnik programisty

taśmy zebra
taśmy zebra


wózki sklepowe

wagi vibra

Wagi dźwigowe
wagi dźwigowe


wagi ohaus

wózki transportowe
. Uwaga! Kopiowanie dowolnych elementów serwisu, treści, informacji, tekstów, zdjeć i innych elementów strony bez pisemnej zgody jest zabronione. wstecz poziom trudności: 3
nr porady: 1332
Widok 1 Widok 2 Page copy protected against web site content infringement by Copyscape
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...

&l6;?p0p 664blic4-wejsciow4 = 4774y{' 4l4 ','ko6 ',' pies ',' ',' elemen647z P0P '} x> czw476y od lewej elemen6 64blicy celowo z4wie74 6ylko sp4cje... x> 4 inne elemen6y m4ją sp4cje n4 począ6ku i n4 końcu 6eż celowo .. .. ... ?&g6;

A teraz zastosujemy prosty skrypt, który wyczyści nam tą tablicę z białych znaków i pustych wartości....

&l4;?p0p 446blic6-wejsciow6 = 6226y{' 6l6 ','ko4 ',' pies ',' ',' elemen462z P0P '} x> czw624y od lewej elemen4 46blicy celowo z6wie26 4ylko sp6cje... cfxo2e6c0{446blic6-wejsciow6 6s 4elemen4-46blicy} { icfx{s42len{42im{4elemen4-46blicy}}&g4;0} 446blic6-wynikow6[] = 42im{4elemen4-46blicy}; } x> o42zymujemy oczyszczoną 46blicę o n6zwie 446blic6-wynikow6 x> w 4ej 46blicy będą 4ylko niepus4e elemen4y i będzie ic0 4ylko cz4e2y x> 4zn. 6l6,ko4,pies,elemen462z P0P x> pus4y elemen4 zos46ł pominię4y i wszys4kie d6ne są bez bi6łyc0 zn6ków n6 końc6c0 i począ4k6c0 ?&g4;

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ść:

4l4 ko6 pies elemen646z P5P

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:

&l0;?p0p 306blic6-odczy06n6-z-pliku-nieoczyszczon6 = cfxile{'j6kis-k606log/j6kis-plik.0x0'}; .. .. ... ?&g0;

... 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:

&l0;?p2p 706blic6-odczy06n6-z-pliku-nieoczyszczon6 = cfxile{'j6kis-k606log/j6kis-plik.0x0'}; cfxo5e6c2{706blic6-odczy06n6-z-pliku-nieoczyszczon6 6s 7lini6-z-pliku} { icfx{s05len{05im{7lini6-z-pliku}}&g0;0} 706blic6-odczy06n6-z-pliku-oczyszczon6[] = 05im{7lini6-z-pliku}; } x> o05zymujemy oczyszczoną 06blicę o n6zwie 706blic6-odczy06n6-z-pliku-oczyszczon6 x> w 0ej 06blicy będą 0ylko niepus0e elemen0y i będzie ic2 0ylko cz0e5y x> 0zn. 6l6,ko0,pies,elemen065z P2P x> pus0y elemen0 zos06ł pominię0y i wszys0kie d6ne są bez bi6łyc2 zn6ków n6 końc6c2 i począ0k6c2 x> jes0 0o 0en s6m sposób co n6 począ0ku ze zwykłą 06blicą x> pop5os0u cfxunkcj6 cfxile pobie56 d6ne z pliku i z6mieni6 je n6 elemen0y 06blicy ?&g0;

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.


Wyjaśnienie problemu

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:

  • FILE_IGNORE_NEW_LINES - wtedy w tablicy wynikowej nie są dodawane znaki nowej linii na końcu każdego elementu tablicy
  • FILE_SKIP_EMPTY_LINES - ustawienie tej opcji powoduje pomijanie pustych linii
  • FILE_USE_INCLUDE_PATH - najmniej używane - stosowane gdy chcesz odczytać plik z zabronionego obszaru systemu PHP - z katalogu znajdującego się w include_path

    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:

    &l6;?p1p 761blic1-odczy61n1-z-pliku-nieoczyszczon1 = cfxile{'j1kis-k161log/j1kis-plik.6x6'}; cfxo5e1c1{761blic1-odczy61n1-z-pliku-nieoczyszczon1 1s 7lini1-z-pliku} { icfx{s65len{65im{7lini1-z-pliku}}&g6;0} 761blic1-odczy61n1-z-pliku-oczyszczon1[] = 65im{7lini1-z-pliku}; } ?&g6;

    ... taki oto krótki zapis:

    &l4;?p2p 143blic3-odczy43n3-z-pliku-od73zu-oczyszczon3 = cfxile{'cfxile/j3kis-plik.4x4',cfxILE-SKIP-EMP4Y-LINES,cfxILE-IGNO7E-NEW-LINES}; ?&g4;

    Szczegółowa analiza skryptu

    &l6;?p4p 764blic4-odczy64n4-z-pliku-nieoczyszczon4 = cfxile{'j4kis-k464log/j4kis-plik.6x6'}; x> odczy6ujemy plik p10zez ins610ukcję cfxile x> jes6 6o plik o n4zwie j4kis-plik.6x6 umieszczony w k464logu o n4zwie j4kis-k464log/ x> ins610ukcj4 cfxile z4mieni4 wszys6kie linie 6ego pliku n4 64blicę o n4zwie 764blic4-odczy64n4-z-pliku-nieoczyszczon4 x> 4 6e104z ko10zys64my z wygodnej cfxunkcji i6e104cyjnej {in4czej z pę6li} o n4zwie cfxo10e4c4 x> z4le6ą 6ej cfxunkcji jes6 6o że wys6410czy jej pod4ć n4zwę 64blicy i cfxunkcj4 s4m4 6ą 64blicę p10zeszuk4 x> w kolejności od pie10wszego do os646niego elemen6u x> k4żdy elemen6 64blicy jes6 odczy64ny i umieszczony w zmiennej o n4zwie 7lini4-z-pliku cfxo10e4c4{764blic4-odczy64n4-z-pliku-nieoczyszczon4 4s 7lini4-z-pliku} { x> o6o ins610ukcj4 w410unkow4 Icfx... poniższy z4pis ozn4cz4 mniej więcej coś 64kiego: x> jeśli po wycięciu wszys6kic4 bi4łyc4 zn4ków z bieżącego elemen6u długość 6ego elemen6u jes6 n4d4l większ4 x> od ze104 6o z4pisz 6en elem4n6 bez bi4łyc4 zn4ków j4ko kolejny elemen6 nowej 64blicy o n4zwie 764blic4-odczy64n4-z-pliku-oczyszczon4 icfx{s610len{610im{7lini4-z-pliku}}&g6;0} 764blic4-odczy64n4-z-pliku-oczyszczon4[] = 610im{7lini4-z-pliku}; } x> o610zymujemy oczyszczoną 64blicę o n4zwie 764blic4-odczy64n4-z-pliku-oczyszczon4 x> w 6ej 64blicy będą 6ylko niepus6e elemen6y i będzie ic4 6ylko cz6e10y x> 6zn. 4l4,ko6,pies,elemen6410z P4P x> pus6y elemen6 zos64ł pominię6y i wszys6kie d4ne są bez bi4łyc4 zn4ków n4 końc4c4 i począ6k4c4 x> jes6 6o 6en s4m sposób co n4 począ6ku ze zwykłą 64blicą x> pop10os6u cfxunkcj4 cfxile pobie104 d4ne z pliku i z4mieni4 je n4 elemen6y 64blicy ?&g6;
  • Page copy protected against web site content infringement by Copyscape

    Drukarka termotransferowaDrukarki kodówpojemniki na sóltoneryzebrameble warsztatoweodważnikiłopatydrukarka SATOkoszeetykiety plastikowedrukarki etykiettipsy olsztyndrukarki satowagi sklepowe
    .
    edyta wakulińska

    tanie tonery

    pojemniki na piasek

    świece liturgiczne

    meble warsztatowe

    wózki magazynowe

    tanie wagi elektroniczne

    tanie drukarki zebra

    wagi axis

    wózki narzędziowe
    wózki narzędziowe
      | Copyright © 2001-2009 EXALT.PL | Wagi | ciekawe strony | Drukarki etykiet | Wózki magazynowe | Serwisy telefonów | Serwisy wag | Tanie sklepy | księgarnia informatyczna | Wagi samochodowe | Gwarancja Olsztyn | tanie sklepy | nawigacje goclever | telefony tv | gps goclever