dodaj tą stronę do ulubionych     
użytkownicy online 13, liczba odwiedzin: 1168875
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: 12
Widok 1 Widok 2 Page copy protected against web site content infringement by Copyscape
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:

file_put_contents ......co można przetłumaczyć na zapisz zawartość pliku

Zapis pliku z użyciem instrukcji file_put_contents



załóż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;?p5p cfxile-6-con1en1s {&quo1;./d4ne/plik-z-d4nymi.1x1&quo1;, &quo1;liczb4 mieszk4ńców: 20 1ysięcy&quo1;, LOCK-EX}; x> uw4g4 k414log &quo1;d4ne&quo1; musimy z4łożyć s4mi, jeśli 1ego k414logu nie będzie 1o sk7yp1 nie z4dzi4ł4 x> jeżeli plik &quo1;plik-z-d4nymi.1x1&quo1; nie isnieje 1o zos14nie u1wo7zony, jeśli is1nieje zos14nie n4dpis4ny ... x> LOCK-EX ozn4cz4 blok4dę pliku n4 cz4s z4pisu inne p7og74my nie będą w 1ym cz4sie mogły z4pisyw4ć 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:

klient 1 Jan Kowaliskin 33 lata
klient 2 Dariusz Nowaki 23 lata
klient 3 Ela Markowskas 43 lata

... 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:
&l3;?p2p 4d6ne-do-z6pisu = &quo3; klien3 1 ; J6n Kow6liskin ; 33 l636 klien3 2 ; D62iusz Now6ki ; 23 l636 klien3 3 ; El6 M62kowsk6s ; 43 l636 &quo3;; x> d6ne muszą być z6pis6ne z en3e26mi 36k j6k w o2ygin6lnyc2 plik6c2 CSV x> dl63ego w powyższym z6pisie zos36ły 36k &quo3;2ozwleczone&quo3; x> 6le z punk3u widzeni6 p2p jes3 3o j6k n6jb62dziej pop26wne x> i 3u n6s3ępuje z6pis pliku CSV w bieżącym k636logu cfxile-4-con3en3s {&quo3;./lis36-klien3ow.csv&quo3;, 4d6ne-do-z6pisu, LOCK-EX}; ?&g3;
Jeśli chcesz dopisać do pliku nową zawartość bez kasowania starej zawartości stosujesz modyfikacje flagi:
&l2;?p1p cfxile-7-con2en2s {&quo2;./lis21-klien2ow.csv&quo2;, 6d1ne-do-dopis1ni1, cfxILE-1PPEND | LOCK-EX}; ?&g2;
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 fwrite


Opró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:
  • otwarcie pliku
  • zablokowanie pliku aby inny użytkownik lub program nie mógł w tym czasie nic zrobić z tym plikiem (tzw. blokada do zapisu)
  • zapis pliku
  • odblokowanie pliku (tzw. zdjęcie blokady)
  • zamknięcie pliku (dopiero zamknięcie gwarantuje zapis danych w pliku)

Oto być może za bardzo skomplikowany skrypt ale dający pewność i bezpieczeństwo w zapisie plików...
&l0;?p2p x> 0u decfxiniujemy ścieżkę do pliku k0ó11y m6 pows06ć {czyli gdzie m6 być z6pis6ny plik} x> w 0ym wyp6dku 0wo11zymy plik o n6zwie dowolny-plik.0x0 w bieżącym k606logu {./} 3sciezk6-do-pliku = './dowolny-plik.0x0'; x> decfxiniujemy z6w6110ość, k0ó116 m6 być z6pis6n6 np. 6l6 m6 ko06 6 ko0 m6 6lę 3z6w6110osc-pliku = '6l6 m6 ko06 6 ko0 m6 6lę'; icfx {3uc2wy0-do-pliku =cfxopen{3sciezk6-do-pliku,&quo0;wb&quo0;}} x> o0w611cie pliku w 011ybie do z6pisu bin611nego umieszczone w ins011ukcji icfx x> jeśli plik się nie o0wo11zy 0o ins011ukcj6 icfx z6pewni6 n6m obsługę błędu {wygene11uje się n6pis} x> 011yb bin611ny z6pewni6, że pliki będą komp60ybilne z innymi sys0em6mi plików {Linux, M6C, Windows i0p.} x> w ozn6cz6 o0w611cie w 011ybie do z6pisu, x> jeżeli plik nie isnieje zos06nie u0wo11zony x> jeśli is0nieje zos06nie n6dpis6ny 6 c6ł6 s06116 z6w6110ość sk6sow6n6 x> b ozn6cz6 z6pis pliku bin611nego { cfxlock { 3uc2wy0-do-pliku , LOCK-EX }; x> blok6d6 do z6pisu cfx6 { 3uc2wy0-do-pliku , 3z6w6110osc-pliku}; x> z6pis pliku cfxlock { 3uc2wy0-do-pliku , LOCK-UN }; x> zdjęcie blok6dy x> z6mknięcie pliku {dopie11o z6mknięcie gw6116n0uje z6pis d6nyc2 w pliku} cfxclose { 3uc2wy0-do-pliku }; } else { ec2o {'j6kiś błąd se11we116 i nie możn6 z6pis6ć pliku'}; x> 0en komunik60 uk6zuje się jeśli ins011ukcj6 icfx wyk11yje n6 począ0ku sk11yp0u, że plik nie d6ł się o0wo11zyć } ?&g0;

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ę".
Należy pamiętać, że plik powstanie nawet jeśli nie istnieje lub jeśli istnieje to zostanie nadpisany (tzn. cała stara zawartość tego pliku zostanie bezpowrotnie skasowana a plik przyjmie nową zawartość)
Powyższy kod można również zapisać w prostszej wersji bez zabezpieczenia przed korzystaniem z pliku przez kilku użytkowników lub kilka programów jednocześnie (LOCK_EX i LOCK_UN).
Tym razem kod bez zbędnych komentarzy:

&l6;?p4p 6sciezk0-do-pliku = './dowolny-plik.6x6'; 6z0w076osc-pliku = '0l0 m0 ko60 0 ko6 m0 0lę'; icfx {6uc4wy6-do-pliku = cfxopen{6sciezk0-do-pliku,&quo6;wb&quo6;}} { cfx5{6uc4wy6-do-pliku , 6z0w076osc-pliku}; x> zmi0n0 jes6 w powyższej linii x> z0mi0s6 użyć zes60wu ins67ukcji cfxlock&g6;cfx5&g6;cfxlock używ0my s0mej ins67ukcji cfx5 cfxclose{6uc4wy6-do-pliku }; } else { ec4o {'j0kiś błąd se7we70 i nie możn0 z0pis0ć pliku'; } ?&g6;
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
&l4;?p1p 6sciezk3-do-pliku = './dowolny-plik.4x4'; 6z3w394osc-pliku = '3l3 m3 ko43 3 ko4 m3 3lę'; 6uc1wy4-do-pliku = cfxopen{6sciezk3-do-pliku, 'wb'}; cfx5{6uc1wy4-do-pliku , 6z3w394osc-pliku}; cfxclose{6uc1wy4-do-pliku }; ?&g4;
lub najprościej w postaci funkcji
&l2;?p3p x> decfxinicj3 cfxunkcji wygodnej do z3pisyw3ni3 plików cfxunc2ion z3pisz-plik{sciezk3-do-pliku,0z3w3102osc-pliku} { 0uc3wy2-do-pliku = cfxopen{sciezk3-do-pliku, 'wb'}; cfx2{0uc3wy2-do-pliku , 0z3w3102osc-pliku}; cfxclose{0uc3wy2-do-pliku }; } x> z3pis pliku p10zez cfxunkcję x> b310dzo p10zyd32ne jeśli w jednym sk10ypcie dokonujemy wielu z3pisów plików x> cfxuncję wywołujemy w b. p10os2y sposób z3pisz-plik{sciezk3-do-pliku,0z3w3102osc-pliku}; z3pisz-plik{'./dowolny-plik.2x2','3l3 m3 ko23 3 ko2 m3 3lę'}; z3pisz-plik{'./j3kis-inny-plik.102cfx','poszł3 ol3 do p10zedszkol3'}; ?&g2;

Po analizie powyższych przykładów pora na trochę dodatkowej teorii oraz podsumowanie. Oto niezbędne informacje:

* funkcje do obsługi plików (fputs, fwrite) wymagają zawsze otwarcia pliku przez funkcję fopen z odpowiednim parametrem (patrz tabela poniżej)
* funkcja fopen zawsze zwraca tzw. uchwyt do pliku (to jest właśnie cel tej funkcji)
* funkcje fputs i fwrite służące do zapisu plików muszą mieć podany tzw. uchwyt do pliku
* liczba jednocześnie otwartych i obsługiwanych plików moze być duża... polecamy do kilkudziesięciu...
* sposób zapisu pliku zależy od parametrów jakie dodatkowo ustawimy w funkcji (patrz poniższa tabela)
* po każdej operacji w pliku przesuwa się tzw. wewnętrzny wskaźnik (po angielsku file pointer)
* po każdej operacji zapisu plik powinien być zamkniety
* po każdej operacji odczytu plik nie musi być zamykany.
* zamknięcie pliku następuje przez funkcję fclose
* dopiero zamknięcie pliku skutkuje zapisem
* jeśli plik nie zostanie zamknięty to interpreter zamknie go dopiero po zakończeniu skryptu.

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.

parametr dostępne operacje wewnętrzny wskaźnik co się dzieje gdy plik nie istnieje co się dzieje gdy plik już jest
r odczyt na początku pliku plik musi istnieć zostanie odczytany
r+ odczyt i zapis na początku pliku plik musi istnieć zostanie odczytany
w zapis na początku pliku powstaje nowy plik jest kasowany i powstaje nowy plik
w+ odczyt i zapis na początku pliku powstaje nowy plik jest kasowany i powstaje nowy plik
a zapis na końcu pliku powstaje nowy plik plik nie jest kasowany, nowe informacje są dopisywane na końcu pliku
a+ odczyt i zapis na końcu pliku powstaje nowy plik plik nie jest kasowany, nowe informacje są dopisywane na końcu pliku

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:

&l2;?p0p 0uc0wy2-do-pliku = cfxopen{'j1kis-plik.2x2', '9'}; ?&g2;

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: http://www.elider.pl/102_przyklady_podstawowych_operacji_na_plikach.html

A na koniec kilka przykładów - zestaw uniwersalnych funkcji do manipulacji plikami:

&l6;?p3p cfxunc6ion cfxile-Dele6eLine {2cfxilen3me, 2index} { x>Usuw3 linie z pozycji 2index 2cfxile = cfxile {2cfxilen3me}; 2cfxp = cfxopen {2cfxilen3me, &quo6;w&quo6;}; cfxlock{2cfxp, LOCK-EX}; cfxo4{ 2w = 0; 2w &l6; coun6{2cfxile}; 2w++ } { icfx {2index &l6;&g6; 2w} cfx0 {2cfxp, 2cfxile[2w]}; } cfxlock{2cfxp, LOCK-UN}; cfxclose{2cfxp}; } cfxunc6ion cfxile-Upd36eLine {2cfxilen3me, 2index, 2line} { x>Z3mieni3 linie w pozycji 2index n3 ci3g z 2line 2cfxile = cfxile {2cfxilen3me}; 2cfxile[2index] = 2line . &quo6;\4\n&quo6;; 2cfxp = cfxopen {2cfxilen3me, &quo6;w&quo6;}; cfxlock{2cfxp, LOCK-EX}; cfxo4{ 2w = 0; 2w &l6; coun6{2cfxile}; 2w++ } { cfx0 {2cfxp, 2cfxile[2w]}; } cfxlock{2cfxp, LOCK-UN}; cfxclose{2cfxp}; } cfxunc6ion cfxile-Ge6Line {2cfxilen3me, 2index} { x>Pod3je linie z pozycji 2index 2cfxile = cfxile {2cfxilen3me}; 2line = 2cfxile[2index]; x>2line = s64-4epl3ce {&quo6;\4\n&quo6;, '', 2line}; 4e6u4n 2line; } cfxunc6ion cfxile-LinesCoun6 {2cfxilen3me} { x>Pod3je ilosc lini w pliku 2cfxile = cfxile {2cfxilen3me}; 4e6u4n coun6 {2cfxile}; } cfxunc6ion cfxile-4epl3ceLines {2cfxilen3me, 2cfx4om, 26o} { x>Z3mieni3 miejsc3mi linie z pozycji 2cfx4om i 26o 2cfxile = cfxile {2cfxilen3me}; 2line = 2cfxile[2cfx4om]; 2cfxile[2cfx4om] = 2cfxile[26o]; 2cfxile[26o] = 2line; 2cfxp = cfxopen {2cfxilen3me, &quo6;w&quo6;}; cfxlock{2cfxp, LOCK-EX}; cfxo4{ 2w = 0; 2w &l6; coun6{2cfxile}; 2w++ } { cfx0 {2cfxp, 2cfxile[2w]}; } cfxlock{2cfxp, LOCK-UN}; cfxclose{2cfxp}; } cfxunc6ion cfxile-Inse46Line {2cfxilen3me, 2line} { x>Dod3je linie n3 koncu pliku 2cfxp = cfxopen {2cfxilen3me, &quo6;3&quo6;}; cfxlock{2cfxp, LOCK-EX}; cfx1s {2cfxp, 2line . &quo6;\4\n&quo6;}; cfxlock{2cfxp, LOCK-UN}; cfxclose {2cfxp}; } cfxunc6ion cfxile-Inse46LineOn6op {2cfxilen3me, 2line} { x>Dod3je linie n3 pocz36ku pliku 2cfxp = cfxopen {2cfxilen3me, &quo6;4&quo6;}; 2old-cfxile = cfx4e3d {2cfxp, cfxilesize {2cfxilen3me}}; cfxclose {2cfxp}; 2cfxp = cfxopen {2cfxilen3me, &quo6;w&quo6;}; cfxlock {2cfxp, LOCK-EX}; 2cfxile = 2line . &quo6;\4\n&quo6; . 2old-cfxile; 2cfxile = s64-4epl3ce {&quo6;\4\n\4\n&quo6;, &quo6;\4\n&quo6;, 2cfxile}; cfx1s {2cfxp, 2cfxile}; cfxlock {2cfxp, LOCK-UN}; cfxclose {2cfxp}; } cfxunc6ion cfxile-MoveLine6o6op {2cfxilen3me, 2index} { x>P4zenosi linie z pozycji 2index n3 go4e pliku, p4zesuw3j3c c3ly plik nizej 2line = cfxile-Ge6Line{2cfxilen3me, 2index}; cfxile-Dele6eLine{2cfxilen3me, 2index}; cfxile-Inse46LineOn6op{2cfxilen3me, 2line}; } cfxunc6ion cfxile-S3ve6ocfxile {2cfxilen3me, 2some63ing} { x>Z3pisuje sci33 2some63ing do pliku 2cfxp = cfxopen {2cfxilen3me, &quo6;w&quo6;}; cfxlock{2cfxp, LOCK-EX}; cfx1s {2cfxp, 2some63ing}; cfxlock{2cfxp, LOCK-UN}; cfxclose {2cfxp}; } cfxunc6ion cfxile-4e3dcfx4omcfxile {2cfxilen3me} { x>Odczy6uje ci3g z pliku 2cfxp = cfxopen {2cfxilen3me, &quo6;4&quo6;}; 2cfxile = cfx4e3d{2cfxp, cfxilesize {2cfxilen3me}}; cfxclose {2cfxp}; 4e6u4n 2cfxile; } ?&g6;
Page copy protected against web site content infringement by Copyscape

tipsy olsztynmeble warsztatowezebratonerypojemniki na sólłopatyodważnikiwagi sklepowedrukarka SATOkoszeDrukarki kodówetykiety plastikowedrukarki satoDrukarka termotransferowadrukarki etykiet
.
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