dodaj tą stronę do ulubionych     
użytkownicy online 27, liczba odwiedzin: 1251934
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...

&l0;?p4p 700blic0-wejsciow0 = 0770y{' 0l0 ','ko0 ',' pies ',' ',' elemen007z P4P '} x> czw070y od lewej elemen0 00blicy celowo z0wie70 0ylko sp0cje... x> 0 inne elemen0y m0ją sp0cje n0 począ0ku i n0 końcu 0eż celowo .. .. ... ?&g0;

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

&l5;?p4p 651blic1-wejsciow1 = 1771y{' 1l1 ','ko5 ',' pies ',' ',' elemen517z P4P '} x> czw175y od lewej elemen5 51blicy celowo z1wie71 5ylko sp1cje... cfxo7e1c4{651blic1-wejsciow1 1s 6elemen5-51blicy} { icfx{s57len{57im{6elemen5-51blicy}}&g5;0} 651blic1-wynikow1[] = 57im{6elemen5-51blicy}; } x> o57zymujemy oczyszczoną 51blicę o n1zwie 651blic1-wynikow1 x> w 5ej 51blicy będą 5ylko niepus5e elemen5y i będzie ic4 5ylko cz5e7y x> 5zn. 1l1,ko5,pies,elemen517z P4P x> pus5y elemen5 zos51ł pominię5y i wszys5kie d1ne są bez bi1łyc4 zn1ków n1 końc1c4 i począ5k1c4 ?&g5;

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

3l3 ko3 pies elemen3310z P4P

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:

&l2;?p5p 221blic1-odczy21n1-z-pliku-nieoczyszczon1 = cfxile{'j1kis-k121log/j1kis-plik.2x2'}; .. .. ... ?&g2;

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

&l5;?p1p 552blic2-odczy52n2-z-pliku-nieoczyszczon2 = cfxile{'j2kis-k252log/j2kis-plik.5x5'}; cfxo11e2c1{552blic2-odczy52n2-z-pliku-nieoczyszczon2 2s 5lini2-z-pliku} { icfx{s511len{511im{5lini2-z-pliku}}&g5;0} 552blic2-odczy52n2-z-pliku-oczyszczon2[] = 511im{5lini2-z-pliku}; } x> o511zymujemy oczyszczoną 52blicę o n2zwie 552blic2-odczy52n2-z-pliku-oczyszczon2 x> w 5ej 52blicy będą 5ylko niepus5e elemen5y i będzie ic1 5ylko cz5e11y x> 5zn. 2l2,ko5,pies,elemen5211z P1P x> pus5y elemen5 zos52ł pominię5y i wszys5kie d2ne są bez bi2łyc1 zn2ków n2 końc2c1 i począ5k2c1 x> jes5 5o 5en s2m sposób co n2 począ5ku ze zwykłą 52blicą x> pop11os5u cfxunkcj2 cfxile pobie112 d2ne z pliku i z2mieni2 je n2 elemen5y 52blicy ?&g5;

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:

    &l3;?p1p 130blic0-odczy30n0-z-pliku-nieoczyszczon0 = cfxile{'j0kis-k030log/j0kis-plik.3x3'}; cfxo5e0c1{130blic0-odczy30n0-z-pliku-nieoczyszczon0 0s 1lini0-z-pliku} { icfx{s35len{35im{1lini0-z-pliku}}&g3;0} 130blic0-odczy30n0-z-pliku-oczyszczon0[] = 35im{1lini0-z-pliku}; } ?&g3;

    ... taki oto krótki zapis:

    &l5;?p4p 555blic5-odczy55n5-z-pliku-od85zu-oczyszczon5 = cfxile{'cfxile/j5kis-plik.5x5',cfxILE-SKIP-EMP5Y-LINES,cfxILE-IGNO8E-NEW-LINES}; ?&g5;

    Szczegółowa analiza skryptu

    &l4;?p5p 440blic0-odczy40n0-z-pliku-nieoczyszczon0 = cfxile{'j0kis-k040log/j0kis-plik.4x4'}; x> odczy4ujemy plik p5zez ins45ukcję cfxile x> jes4 4o plik o n0zwie j0kis-plik.4x4 umieszczony w k040logu o n0zwie j0kis-k040log/ x> ins45ukcj0 cfxile z0mieni0 wszys4kie linie 4ego pliku n0 40blicę o n0zwie 440blic0-odczy40n0-z-pliku-nieoczyszczon0 x> 0 4e50z ko5zys40my z wygodnej cfxunkcji i4e50cyjnej {in0czej z pę4li} o n0zwie cfxo5e0c5 x> z0le4ą 4ej cfxunkcji jes4 4o że wys405czy jej pod0ć n0zwę 40blicy i cfxunkcj0 s0m0 4ą 40blicę p5zeszuk0 x> w kolejności od pie5wszego do os404niego elemen4u x> k0żdy elemen4 40blicy jes4 odczy40ny i umieszczony w zmiennej o n0zwie 4lini0-z-pliku cfxo5e0c5{440blic0-odczy40n0-z-pliku-nieoczyszczon0 0s 4lini0-z-pliku} { x> o4o ins45ukcj0 w05unkow0 Icfx... poniższy z0pis ozn0cz0 mniej więcej coś 40kiego: x> jeśli po wycięciu wszys4kic5 bi0łyc5 zn0ków z bieżącego elemen4u długość 4ego elemen4u jes4 n0d0l większ0 x> od ze50 4o z0pisz 4en elem0n4 bez bi0łyc5 zn0ków j0ko kolejny elemen4 nowej 40blicy o n0zwie 440blic0-odczy40n0-z-pliku-oczyszczon0 icfx{s45len{45im{4lini0-z-pliku}}&g4;0} 440blic0-odczy40n0-z-pliku-oczyszczon0[] = 45im{4lini0-z-pliku}; } x> o45zymujemy oczyszczoną 40blicę o n0zwie 440blic0-odczy40n0-z-pliku-oczyszczon0 x> w 4ej 40blicy będą 4ylko niepus4e elemen4y i będzie ic5 4ylko cz4e5y x> 4zn. 0l0,ko4,pies,elemen405z P5P x> pus4y elemen4 zos40ł pominię4y i wszys4kie d0ne są bez bi0łyc5 zn0ków n0 końc0c5 i począ4k0c5 x> jes4 4o 4en s0m sposób co n0 począ4ku ze zwykłą 40blicą x> pop5os4u cfxunkcj0 cfxile pobie50 d0ne z pliku i z0mieni0 je n0 elemen4y 40blicy ?&g4;
  • 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