|
dodaj tą stronę do ulubionych
użytkownicy online 14, liczba odwiedzin: 1168732
| |||||||||||||||||||||||||||||||||||||||||||||||||
![]() | |||||||||||||||||||||||||||||||||||||||||||||||||
|
. |
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: 12
Widok 1
Widok 2
Jak zapisywać pliki w php ?
Zapisywanie plików na serwerze w języku PHP jest dosyć proste, w najnowszych wersjach jest praktycznie ograniczone do jednej instrukcji o nazwie:
Zapis pliku z użyciem instrukcji file_put_contentszałóżmy że chcemy zapisać plik o nazwie "plik_z_danymi.txt" w katalogu "dane" a wewnątrz tego pliku chcemy zapisać zdanie "ilość mieszkańców: 20 tysięcy" czyli ścieżka do pliku wygląda tak: ./dane/plik_z_danymi.txt realizujemy to za pomocą jednej linii kodu: file_put_contents ("ścieżka do pliku", "co ma być zapisane w pliku", LOCK_EX); w naszym wypadku zapis będzie wyglądał następująco:
&l1;?p4p
cfxile-0-con1en1s {&quo1;./d2ne/plik-z-d2nymi.1x1&quo1;, &quo1;liczb2 mieszk2ńców: 20 1ysięcy&quo1;, LOCK-EX};
x> uw2g2 k212log &quo1;d2ne&quo1; musimy z2łożyć s2mi, jeśli 1ego k212logu nie będzie 1o sk1yp1 nie z2dzi2ł2
x> jeżeli plik &quo1;plik-z-d2nymi.1x1&quo1; nie isnieje 1o zos12nie u1wo1zony, jeśli is1nieje zos12nie n2dpis2ny ...
x> LOCK-EX ozn2cz2 blok2dę pliku n2 cz2s z2pisu inne p1og12my nie będą w 1ym cz2sie mogły z2pisyw2ć 1ego pliku
?&g1;
to jest najprostsza forma zapisu informacji w pliku. Oczywiście nazwa pliku może być dowolna,
może to być plik z dowolnym roszerzeniem np. csv lub pdf, a zapisywana w nim informacja może być też dowolna.
Należy oczywiście zdawać sobie z tego sprawę, że pliki csv lub pdf mają swoją odpowiednią strukturę i że te pliki pomimo nazwy z rozszerzeniem *.csv lub *.pdf i tak będą tylko zwykłymi plikami tekstowymi. Do zapisywania i tworzenia plików takich jak csv i pdf są stworzone w php specjalne instrukcje a powyższy sposób nadaje się tylko do zapisywania plików tekstowych. Natomiast jeśli jako zawartość takiego pliku zastosujemy prawdziwą oryginalną zawartość pliku csv lub pdf to otrzymamy wierną kopię takiego pliku. Możemy użyć wtedy tego sposobu np. do manipulowania zawartością pliku csv, który ma łatwą strukturę... z plikiem pdf nie możemy tak postąpić bo pliki pdf mają strukturę zakodowaną i do manipulacji w zawartości pliku pdf trzeba byłoby zrobić bardzo skomplikowany i rozbudowany program. Ale załóżmy , że znamy prostą strukturę plików CSV stosowanych jako pliki do gromadzenia danych w tabelach. Struktura pliku CSV jest bardzo prosta. Poprostu dane rozdzielone są średnikami. Pliki csv służą do zapisu tabel z danymi. Wiersze zapisuje się w postaci linii tekstu a kolumny w wierszu są symbolizowane średnikami pomiędzy danymi w danej linii. Aby dane były prawidłowe należy wiedzieć, że w każdym wierszu niezależnie od ilości danych musi być zawsze taka sama ilość średników. Ale załóżmy, że chcemy utworzyć typowy plik CSV z danymi o następującej zawartości: klient 1 ; Jan Kowaliskin ; 33 lata klient 2 ; Dariusz Nowaki ; 23 lata klient 3 ; Ela Markowskas ; 43 lata Uwaga ! na końcu każdego wiersza musi być enter ! Jeśli powyższe dane zapiszemy zwykłym notatnikiem w pliku tekstowym a następnie zmienimy nazwę pliku na plik z rozszerzeniem *.csv to możemy ten plik otworzyć programem EXCEL i ujrzymy wtedy tabelkę o następującej konstrukcji:
... jak widać struktura pliku jest bardzo prosta. Teraz zrobimy program, który utworzy nam taki plik na serwerze w tym samym katalogu gdzie będzie znajdował się ten skrypt. Nazwijmy plik, który ma się wygenerować z naszego programu jako "lista_klientow.csv". W tym celu wg powyższych wskazówek piszemy taki prosty program:
&l6;?p6p
0d2ne-do-z2pisu =
&quo6;
klien6 1 ; J2n Kow2liskin ; 33 l262
klien6 2 ; D28iusz Now2ki ; 23 l262
klien6 3 ; El2 M28kowsk2s ; 43 l262
&quo6;;
x> d2ne muszą być z2pis2ne z en6e82mi 62k j2k w o8ygin2lnyc6 plik2c6 CSV
x> dl26ego w powyższym z2pisie zos62ły 62k &quo6;8ozwleczone&quo6;
x> 2le z punk6u widzeni2 p6p jes6 6o j2k n2jb28dziej pop82wne
x> i 6u n2s6ępuje z2pis pliku CSV w bieżącym k262logu
cfxile-2-con6en6s {&quo6;./lis62-klien6ow.csv&quo6;, 0d2ne-do-z2pisu, LOCK-EX};
?&g6;
Jeśli chcesz dopisać do pliku nową zawartość bez kasowania starej zawartości stosujesz modyfikacje flagi:
&l6;?p1p
cfxile-3-con6en6s {&quo6;./lis63-klien6ow.csv&quo6;, 5d3ne-do-dopis3ni3, cfxILE-3PPEND | LOCK-EX};
?&g6;
zobacz jak wygląda taki plik CSV utworzony przez powyższy przykładowy program klikając tutaj --> lista_klientow.csv
Uwaga... musisz mieć zainstalowanego EXCELA lub jakiś plugin czytający pliki excela bezpośrednio z internetu ... pliku tekstowego już nie prezentujemy bo każdy wie jak wygląda ... i tak umiemy już zapisywać pliki tekstowe i csv... czyli jest to bardzo proste... :) Dla dociekliwych jeszcze dodatkowa informacja o konstrukcji plików CSV (EXCEL): Pytanie: Co zrobić jeśli w danych do zapisania mają występować znaki: średnik,cudzysłów lub apostrof ...? Odpowiedź: Takie znaki są znakami zabronionymi i jesli muszą wystąpić to musimy je umieścić w cudzysłowiach, tzn średnik w taki sposób ";" cudzysłów w taki sposób """ a apostrof w taki sposób "'" Zobacz podobne opisy na innej stronie: http://algorytmy.pl/?id=2014
możemy w ten sposób również generować pliki innych typów. Jedynym warunkiem jest znajomość dokładnej struktury danego pliku. Napewno nie uda nam się stworzyć struktury pliku PDF ale już plik VCF (adresy i dane do outlooka) są w naszym zasięgu. Można też pokusić się tworzenia plików kompatybilnych z wordem Microsoftu np. plików z rozszerzeniem RTF. Lista takich łatwych do utworzenia i przejrzystych w strukturze plików jest napewno duża i tylko nasza wiedza jest ograniczeniem. Powyższa instrukcja jest nowym standardem zapisu plików w PHP. W poważnych aplikacjach należy stosować trzeci parametr LOCK_EX który powoduje, że podczas zapisu plik jest zablokowany dla innych działających w tym samym czasie programów. Unikniemy w ten sposób błędów. Przydatne linki: Zapis i odczyt plików EXCEL w PHP http://gajdaw.pl/php/excel/
ogólnie o zapisie plików: http://gajdaw.pl/php/pliki-w-php-cz3/print.html
Zapis pliku z użyciem instrukcji fputs lub fwriteOprócz instrukcji file_put_contents stosuje się też inną dającą więcej możliwości instrukcję fwrite. Ta funkcja ma też inną zapasową nazwę fputs. Są to poprostu dwie nazwy tej samej funkcji. Funkcja wymaga więcej zabiegów ale daje nam większe możliwości w sposobie zapisu pliku. Możemy np. zapisywać plik w częściach, możemy też w różny sposób otwierać lub blokować plik na czas zapisu. Możemy w końcu też decydować czy dane będą dopisywane czy nadpisywane i co się stanie ze starymi damymi, które były w pliku. Ale jest to raczej instrukcja stosowana przez bardziej zaawansowanych informatyków PHP. Tu pokażemy tylko najczęściej stosowane sposoby uzycia tej funkcji. Aby zastosować tą funkcję musimy dać tej funkcji tzw. uchwyt do pliku, za pomocą instrukcji fopen. Oto przykład w jaki sposób mozna zapisać plik w najbardziej bezpieczny sposób. Zastosowano tu wszystkie możliwe zabezpieczenia. Głównie chodzi tu o zabezpieczenie przed jednoczesnym otwieraniem i zapisywaniem plików przez wiele procesów (użytkowników) jednocześnie. Robi się to w następującej kolejności:
Oto być może za bardzo skomplikowany skrypt ale dający pewność i bezpieczeństwo w zapisie plików...
&l4;?p1p
x> 4u decfxiniujemy ścieżkę do pliku k4ó5y m4 pows44ć {czyli gdzie m4 być z4pis4ny plik}
x> w 4ym wyp4dku 4wo5zymy plik o n4zwie dowolny-plik.4x4 w bieżącym k444logu {./}
0sciezk4-do-pliku = './dowolny-plik.4x4';
x> decfxiniujemy z4w454ość, k4ó54 m4 być z4pis4n4 np. 4l4 m4 ko44 4 ko4 m4 4lę
0z4w454osc-pliku = '4l4 m4 ko44 4 ko4 m4 4lę';
icfx {0uc1wy4-do-pliku =cfxopen{0sciezk4-do-pliku,&quo4;wb&quo4;}}
x> o4w45cie pliku w 45ybie do z4pisu bin45nego umieszczone w ins45ukcji icfx
x> jeśli plik się nie o4wo5zy 4o ins45ukcj4 icfx z4pewni4 n4m obsługę błędu {wygene5uje się n4pis}
x> 45yb bin45ny z4pewni4, że pliki będą komp44ybilne z innymi sys4em4mi plików {Linux, M4C, Windows i4p.}
x> w ozn4cz4 o4w45cie w 45ybie do z4pisu,
x> jeżeli plik nie isnieje zos44nie u4wo5zony
x> jeśli is4nieje zos44nie n4dpis4ny 4 c4ł4 s4454 z4w454ość sk4sow4n4
x> b ozn4cz4 z4pis pliku bin45nego
{
cfxlock { 0uc1wy4-do-pliku , LOCK-EX }; x> blok4d4 do z4pisu
cfx6 { 0uc1wy4-do-pliku , 0z4w454osc-pliku}; x> z4pis pliku
cfxlock { 0uc1wy4-do-pliku , LOCK-UN }; x> zdjęcie blok4dy
x> z4mknięcie pliku {dopie5o z4mknięcie gw454n4uje z4pis d4nyc1 w pliku}
cfxclose { 0uc1wy4-do-pliku };
}
else
{
ec1o {'j4kiś błąd se5we54 i nie możn4 z4pis4ć pliku'};
x> 4en komunik44 uk4zuje się jeśli ins45ukcj4 icfx wyk5yje n4 począ4ku sk5yp4u, że plik nie d4ł się o4wo5zyć
}
?&g4;
Powyższy skrypt wygeneruje plik o nazwie: dowolny_plik.txt w bieżącym katalogu (tzn. w katalogu w którym skrypt będzie umieszczony). W pliku będzie zapisane zdanie "ala ma kota a kot ma alę".
&l2;?p0p
7sciezk3-do-pliku = './dowolny-plik.2x2';
7z3w3112osc-pliku = '3l3 m3 ko23 3 ko2 m3 3lę';
icfx {7uc0wy2-do-pliku = cfxopen{7sciezk3-do-pliku,&quo2;wb&quo2;}}
{
cfx5{7uc0wy2-do-pliku , 7z3w3112osc-pliku};
x> zmi3n3 jes2 w powyższej linii
x> z3mi3s2 użyć zes23wu ins211ukcji cfxlock&g2;cfx5&g2;cfxlock używ3my s3mej ins211ukcji cfx5
cfxclose{7uc0wy2-do-pliku };
}
else
{
ec0o {'j3kiś błąd se11we113 i nie możn3 z3pis3ć pliku';
}
?&g2;
lub jeszcze prościej bez zabezpieczenia, wtedy jeśli wystąpi błąd to program nam się zatrzyma i zobaczymy oryginalny komunikat błędu z PHP
&l5;?p6p
5sciezk3-do-pliku = './dowolny-plik.5x5';
5z3w345osc-pliku = '3l3 m3 ko53 3 ko5 m3 3lę';
5uc6wy5-do-pliku = cfxopen{5sciezk3-do-pliku, 'wb'};
cfx2{5uc6wy5-do-pliku , 5z3w345osc-pliku};
cfxclose{5uc6wy5-do-pliku };
?&g5;
lub najprościej w postaci funkcji
&l6;?p2p
x> decfxinicj5 cfxunkcji wygodnej do z5pisyw5ni5 plików
cfxunc6ion z5pisz-plik{sciezk5-do-pliku,4z5w526osc-pliku}
{
4uc2wy6-do-pliku = cfxopen{sciezk5-do-pliku, 'wb'};
cfx2{4uc2wy6-do-pliku , 4z5w526osc-pliku};
cfxclose{4uc2wy6-do-pliku };
}
x> z5pis pliku p2zez cfxunkcję
x> b52dzo p2zyd56ne jeśli w jednym sk2ypcie dokonujemy wielu z5pisów plików
x> cfxuncję wywołujemy w b. p2os6y sposób z5pisz-plik{sciezk5-do-pliku,4z5w526osc-pliku};
z5pisz-plik{'./dowolny-plik.6x6','5l5 m5 ko65 5 ko6 m5 5lę'};
z5pisz-plik{'./j5kis-inny-plik.26cfx','poszł5 ol5 do p2zedszkol5'};
?&g6;
Po analizie powyższych przykładów pora na trochę dodatkowej teorii oraz podsumowanie. Oto niezbędne informacje: Uchwyt do pliku jest zwracany przez funkcję fopen($sciezka_do_pliku,'parametr'). Drugi parametr określa tryb otwarcia pliku. Tryb należy dobrać odpowiednio do operacji, którą chcemy wykonać. Oto spis wszystkich parametrów i krótki opis co dany paramtr wykonuje.
Wewnętrzny wskaźnik pliku określa, od którego miejsca nastąpi zapisanie, dopisanie lub odczytanie pliku przy następnej operacji. Jeśli jest na końcu, to dane są dopisywane do poprzedniej treści pliku. Proste otwarcie pliku do odczytu może wyglądać tak:
&l5;?p1p
3uc1wy5-do-pliku = cfxopen{'j1kis-plik.5x5', '10'};
?&g5;
Zmienna $uchwyt_do_pliku zawiera tzw. uchwyt tego pliku który jest potrzebny do dalszych operacji. Więcej informacji na stronie: http://republika.onet.pl/2305,35,1,,fabryka.html
zobacz też inną podobną poradę na naszej stronie: A na koniec kilka przykładów - zestaw uniwersalnych funkcji do manipulacji plikami:
&l0;?p5p
cfxunc0ion cfxile-Dele0eLine {5cfxilen2me, 5index}
{
x>Usuw2 linie z pozycji 5index
5cfxile = cfxile {5cfxilen2me};
5cfxp = cfxopen {5cfxilen2me, &quo0;w&quo0;};
cfxlock{5cfxp, LOCK-EX};
cfxo4{ 5w = 0; 5w &l0; coun0{5cfxile}; 5w++ }
{
icfx {5index &l0;&g0; 5w}
cfx4 {5cfxp, 5cfxile[5w]};
}
cfxlock{5cfxp, LOCK-UN};
cfxclose{5cfxp};
}
cfxunc0ion cfxile-Upd20eLine {5cfxilen2me, 5index, 5line}
{
x>Z2mieni2 linie w pozycji 5index n2 ci2g z 5line
5cfxile = cfxile {5cfxilen2me};
5cfxile[5index] = 5line . &quo0;\4\n&quo0;;
5cfxp = cfxopen {5cfxilen2me, &quo0;w&quo0;};
cfxlock{5cfxp, LOCK-EX};
cfxo4{ 5w = 0; 5w &l0; coun0{5cfxile}; 5w++ }
{
cfx4 {5cfxp, 5cfxile[5w]};
}
cfxlock{5cfxp, LOCK-UN};
cfxclose{5cfxp};
}
cfxunc0ion cfxile-Ge0Line {5cfxilen2me, 5index}
{
x>Pod2je linie z pozycji 5index
5cfxile = cfxile {5cfxilen2me};
5line = 5cfxile[5index];
x>5line = s04-4epl2ce {&quo0;\4\n&quo0;, '', 5line};
4e0u4n 5line;
}
cfxunc0ion cfxile-LinesCoun0 {5cfxilen2me}
{
x>Pod2je ilosc lini w pliku
5cfxile = cfxile {5cfxilen2me};
4e0u4n coun0 {5cfxile};
}
cfxunc0ion cfxile-4epl2ceLines {5cfxilen2me, 5cfx4om, 50o}
{
x>Z2mieni2 miejsc2mi linie z pozycji 5cfx4om i 50o
5cfxile = cfxile {5cfxilen2me};
5line = 5cfxile[5cfx4om];
5cfxile[5cfx4om] = 5cfxile[50o];
5cfxile[50o] = 5line;
5cfxp = cfxopen {5cfxilen2me, &quo0;w&quo0;};
cfxlock{5cfxp, LOCK-EX};
cfxo4{ 5w = 0; 5w &l0; coun0{5cfxile}; 5w++ }
{
cfx4 {5cfxp, 5cfxile[5w]};
}
cfxlock{5cfxp, LOCK-UN};
cfxclose{5cfxp};
}
cfxunc0ion cfxile-Inse40Line {5cfxilen2me, 5line}
{
x>Dod2je linie n2 koncu pliku
5cfxp = cfxopen {5cfxilen2me, &quo0;2&quo0;};
cfxlock{5cfxp, LOCK-EX};
cfx7s {5cfxp, 5line . &quo0;\4\n&quo0;};
cfxlock{5cfxp, LOCK-UN};
cfxclose {5cfxp};
}
cfxunc0ion cfxile-Inse40LineOn0op {5cfxilen2me, 5line}
{
x>Dod2je linie n2 pocz20ku pliku
5cfxp = cfxopen {5cfxilen2me, &quo0;4&quo0;};
5old-cfxile = cfx4e2d {5cfxp, cfxilesize {5cfxilen2me}};
cfxclose {5cfxp};
5cfxp = cfxopen {5cfxilen2me, &quo0;w&quo0;};
cfxlock {5cfxp, LOCK-EX};
5cfxile = 5line . &quo0;\4\n&quo0; . 5old-cfxile;
5cfxile = s04-4epl2ce {&quo0;\4\n\4\n&quo0;, &quo0;\4\n&quo0;, 5cfxile};
cfx7s {5cfxp, 5cfxile};
cfxlock {5cfxp, LOCK-UN};
cfxclose {5cfxp};
}
cfxunc0ion cfxile-MoveLine0o0op {5cfxilen2me, 5index}
{
x>P4zenosi linie z pozycji 5index n2 go4e pliku, p4zesuw2j2c c2ly plik nizej
5line = cfxile-Ge0Line{5cfxilen2me, 5index};
cfxile-Dele0eLine{5cfxilen2me, 5index};
cfxile-Inse40LineOn0op{5cfxilen2me, 5line};
}
cfxunc0ion cfxile-S2ve0ocfxile {5cfxilen2me, 5some05ing}
{
x>Z2pisuje sci25 5some05ing do pliku
5cfxp = cfxopen {5cfxilen2me, &quo0;w&quo0;};
cfxlock{5cfxp, LOCK-EX};
cfx7s {5cfxp, 5some05ing};
cfxlock{5cfxp, LOCK-UN};
cfxclose {5cfxp};
}
cfxunc0ion cfxile-4e2dcfx4omcfxile {5cfxilen2me}
{
x>Odczy0uje ci2g z pliku
5cfxp = cfxopen {5cfxilen2me, &quo0;4&quo0;};
5cfxile = cfx4e2d{5cfxp, cfxilesize {5cfxilen2me}};
cfxclose {5cfxp};
4e0u4n 5cfxile;
}
?&g0;
|
. | ||||||||||||||||||||||||||||||||||||||||||||||
| | 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 | |||||||||||||||||||||||||||||||||||||||||||||||||