|
dodaj tą stronę do ulubionych
użytkownicy online 25, liczba odwiedzin: 1251955
| |||||||||
![]() | |||||||||
|
. |
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
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.
Jednak początkujący webmasterzy często chcą zapisywać dane w zwykłym pliku, do którego chcą mieć dostęp z poziomu FTP.
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....
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...
&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).
&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.
Wyjaśnienie problemu
Funkcja file działa podobnie do file_get_contents(), tylko że file() zwraca plik w formie tablicy.
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).
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;
|
. | ||||||
| | 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 | |||||||||