12. OPERACJE NA PLIKACH



Podobne dokumenty
Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

14. POZOSTAŁE CIEKAWE FUNKCJE

11. PROFESJONALNE ZABEZPIECZENIE HASŁEM

W oknie na środku, moŝna wybrać język, który będzie językiem domyślnym dla TC. Wybierzmy zatem język polski:

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

4. Pliki Informacje ogólne o dostępie do plików w PHP Sprawdzanie istnienia pliku file_exists()

XII. Warunek wielokrotnego wyboru switch... case

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Programowanie w języku Python. Grażyna Koba

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Podstawy obsługi aplikacji Generator Wniosków Płatniczych

A. Instalacja serwera www

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach

SSK - Techniki Internetowe

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

XV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie.

Instrukcja do panelu administracyjnego. do zarządzania kontem FTP WebAs.

Podstawowe informacje o obsłudze pliku z uprawnieniami licencja.txt

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

Program automatycznej obsługi sklepu i supermarketu

Instrukcja instalacji i obsługi gotowych szablonów aukcji allegro oraz szablonów na zamówienie

Instrukcja warunkowa i złoŝona.

Programowanie internetowe

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Biblioteka standardowa - operacje wejścia/wyjścia

Instrukcja automatycznego tworzenia pozycji towarowych SAD na podstawie danych wczytywanych z plików zewnętrznych (XLS).

Trochę o plikach wsadowych (Windows)

Komunikator internetowy w C#

wersja dokumentacji 1.00 Opis programu TeleTokenEdit

Wysyłanie pliku na serwer. Plik na serwerze.

Konfiguracja programu pocztowego Outlook Express i toŝsamości.

Systemy liczenia. 333= 3*100+3*10+3*1

KaŜdy z formularzy naleŝy podpiąć do usługi. Nazwa usługi moŝe pokrywać się z nazwą formularza, nie jest to jednak konieczne.

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.

Wskaźniki do funkcji. Wykład 11. Podstawy programowania ( język C ) Wskaźniki do funkcji (1) Wskaźniki do funkcji (2)

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Instrukcja administratora Agenta Administracji i Aktualizacji Aplikacji oraz baz danych Polskiego FADN oraz pobierania danych słownikowych

Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka

Zdalna obsługa transcievera. H A M R A D I O D E L U X E R e m o t e S e r v e r C o n f i g u r a t i o n

Instrukcja Instalacji

INFORMATYKA Studia Niestacjonarne Elektrotechnika

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

Ćwiczenie: JavaScript Cookies (3x45 minut)

z :15

Współpraca Integry z programami zewnętrznymi

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Dane - pobieranie, przekazywanie i przechowywanie. dr Beata Kuźmińska-Sołśnia

Szablon główny (plik guestbook.php) będzie miał postać:

Zaawansowane aplikacje internetowe

1. Instalacja systemu Integra 7

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2

Instrukcja skrócona (dla informatyka)

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

Pętle. Dodał Administrator niedziela, 14 marzec :27

Omówienie procesu zakupowego w sklepie internetowym Papyrus Sp. z o. o. Spis treści

Plik jest reprezentowany przez strumień znaków (bajtów) o zmiennej długości. Koniec strumienia identyfikowany jest znacznikiem końca pliku EOF.

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

z :14

Przekazywanie danych. Dane zewnętrzne mogą pochodzić z róŝnych źródeł:

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Procedura uzyskania certyfikatu kwalifikowanego. Krok 3. Pobieranie certyfikatu kwalifikowanego wersja 1.8

Kurs języka PHP dla początkujących. Ryszard Rogacz 2019

INSTRUKCJA INWENTARYZACJI

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

I Tworzenie prezentacji za pomocą szablonu w programie Power-Point. 1. Wybieramy z górnego menu polecenie Nowy a następnie Utwórz z szablonu

KaŜda instrukcja musi być zakończona średnikiem ;!!!

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Wykład PASCAL - Pliki tekstowe

Pliki. Informacje ogólne. Obsługa plików w języku C

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Autor: Joanna Karwowska

1 Podstawy c++ w pigułce.

Podstawy JavaScript ćwiczenia

Tablice. Jones Stygar na tropie zmiennych

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

Pliki. Informacje ogólne. Obsługa plików w języku C

Programowanie w językach

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Projektowanie systemu sprzedaŝy ubezpieczeń dla T. U. Generali zgodnie z metodyką User-Centered Design

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego

Aplikacje WWW - laboratorium

Załącznik 2 z dnia do Zarządzenie Nr 8 Rektora UW z dnia 31 sierpnia 2004

Instrukcja uŝytkownika

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

Pliki. Operacje na plikach w Pascalu

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Konfigurowanie konta pocztowego w programie Netscape (wersja 7.2)

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

PREZENTACJE MULTIMEDIALNE cz.2

Programowanie w językach wysokiego poziomu

Transkrypt:

12. OPERACJE NA PLIKACH PHP, jako język skryptowy moŝe wykonywać się po stronie serwera, w tym takŝe wykonywać operację na plikach. W lekcji z pętlami mieliśmy juŝ przypadek pobrania z pliku odpowiednich informacji, ale to było absolutną podstawą. Teraz poznamy prawdziwą zabawę z tym językiem. Uwaga: PHP jest językiem doskonale integrującym się z bazami danych, w których znacznie lepiej i łatwiej jest przechowywać dane, ale do istnienia baz danych potrzebny jest serwer, który takim czymś dysponuje, ale... kurs nie jest poświęcony językom baz danych (SQL). Uwaga: plik, na którym działa skrypt PHP musi mieć odpowiednie przywileje. Jest to tzw. CHMOD Chalenge Mode (ang. zmiana trybu). Korzystając z klienta FTP moŝemy łatwo to zmienić. Aby wartość pliku moŝna było edytować naleŝy uŝyć CHMODu o wartości 666, aby móc go skasować, takŝe edytować naleŝy uŝyć CHMODu o wartości 777, a aby plik odczytać wystarczy CHMOD 644, który zwykle jest domyślny dla wysyłanych plików. Na serwerach postawionych na systemie Windows nie musimy martwić się o CHMOD. fopen() i rodzaje uprawnień Wszystkie funkcje, które dotyczą działań na plikach poprzedzone są literką f, co oznacza skrót od słowa file (ang. plik). Pierwszą poznaną funkcją będzie fopen() (ang. otwórz plik), która zawiera dwa argumenty. JeŜeli jeszcze o tym nie wspominałem, a na pewno wspominałem argumenty oddzielamy przecinkami. Pierwszy argument przechowuje ścieŝkę dostępu do otwieranego pliku, a drugi, co ma z nim zrobić (tzw. tryb). Głównymi trybami są: a - do dopisywania treści do treści juŝ istniejącej (na samym końcu pliku) (666) r - do odczytywania treści bez jej modyfikacji (644) w - do dopisywania treści uprzednio usuwając istniejącą zawartość pliku (666)

Mniej waŝnymi, ale godnymi uznania są tryby rozszerzające tryby juŝ istniejące poprzez dodania plusika. Są to: a+ - do dopisywania treści do treści juŝ istniejącej (na samym końcu pliku) plus moŝliwość odczytania jej (całości pliku) wskaźnik na końcu pliku (666) r+ - do odczytywania treści plus moŝliwość do dopisywania treści do treści juŝ istniejącej (na samym końcu pliku) w+ - do dopisywania treści uprzednio usuwając istniejącą zawartość pliku plus moŝliwość odczytania jej wskaźnik na końcu pliku (666) Uwaga: liczby w nawiasach oznaczają minimalny CHMOD, wymagany do wykonania danej operacji. Uwaga: w przypadku braku pliku, którego chcemy modyfikować [za pomocą trybów: w(+) i a(+)], jeŝeli jest taka moŝliwość plik zostanie stworzony. Nie stanie się to jednak w przypadku trybu r+, gdyŝ przed zapisem plik jest odczytywany. Odczytywanie zawartości pliku Istnieje kilka funkcji pozwalających na odczytywanie treści z plików, są to: fgetc() - funkcja pobiera pierwszy znak z pliku fgets() - funkcja pobiera pierwszą linię z pliku fread() - czyta ustalony ciąg znaków Stwórzmy teraz plik o przykładowej nazwie plik.txt i umieśćmy w nim kilka byle jakich znaków np. asdf. Uwaga: rozszerzenie nie ma znaczenia, moŝe być to nawet rozszerzenie nie istniejące, ogólny brak rozszerzenia, czy nawet takie rozszerzenia jak php, czy php3. Uwaga: jeŝeli do tej pory wszystko testowaliśmy na serwerze zdalnym, na 99% musimy zmienić CHMOD na 666 (to takŝe pozwala na odczyt), z wykluczeniem serwerów postawionych na oprogramowaniu Microsoft. W bardzo łatwy sposób moŝemy odczytać literkę a, z ustalonej treści asdf. Funkcja fgetc ma w sobie tylko jeden argument funkcję otwierającą plik i odpowiada za pobranie pierwszego znaku z pliku:

$znak = fgetc($plik); echo $znak; W miejscu postawienia tego skryptu powinniśmy ujrzeć literkę a. Widzimy tutaj takŝe funkcję fclose(), pewnie znajomość angielskiego mówi nam, Ŝe to jest zamknięcie pliku... i dobrze nam mówi. Pozostawienie pliku otwartego moŝe spowodować róŝne niezgodności, w szczególności, jeŝeli jeden plik jest otwarty wielokrotnie np. przez odświeŝanie strony. Oczywiście jeden znak to za mało, aby mówić o czymś ciekawym, pobierzmy z niego całą linię, tzn. w naszym przypadku asdf (linia jest od początku do znaku przejścia do nowej linii): Oczywiście linia to jest wciąŝ za mało, czas na czytanie większych objętości tekstu, w naszym pliku plik.txt stwórzmy nową linię, za pomocą klawisza Enter i umieśćmy w niej np. Qwerty. Za pomocą funkcji fread() moŝemy odczytać określoną ilość znaków (umieszczając określony argument w tej funkcji) np.: $czytaj = fread($plik,100); echo $czytaj;

Sprawdzanie wielkości pliku - filesize() Skrypt ten jest odpowiedzialny za wyświetlenie pierwszych stu znaków (gdyŝ taka liczba została zadeklarowana) z danego pliku. Oczywiście nie polecam robić tak, jak jest w przykładzie kaŝemy wyświetlać z niego więcej znaków niŝ jest w nim zapisanych. MoŜemy sobie znacznie ułatwić zadanie korzystając z funkcji filesize(), której argumentem jest nazwa pliku (ale nie nazwa zmiennej otwierająca plik). To takŝe najlepiej przypisać do jakiejś zmiennej. Funkcja filesize() zwróci nam rozmiar pliku w bajtach, a jak pewnie wiemy, a warto wiedzieć kaŝdy znak moŝliwy do łatwego zrozumienia przez człowieka zajmuje jeden bajt. Przykład zastosowania filesize(): $rozmiar = filesize("plik.txt"); $czytaj = fread($plik,$rozmiar); echo $czytaj; Uwaga: za pomocą tej funkcji moŝemy łatwo zautomatyzować dział download na naszej stronie, o ile taki istnieje. Za pomocą funkcji filesize() połączonej z instrukcjami warunkowymi moŝemy zapomnieć o mozolnym pisaniu rozmiarów dokumentów np.: $nazwa = ""; // przypisujemy nazwę danego pliku $rozmiar = filesize("download/$nazwa"); if ($rozmiar >= 1048576) { $rozmiar = $rozmiar / 1048576; $rozmiar = round($rozmiar); $rozmiar = "$rozmiar MB"; } else if ($rozmiar >= 1024) { $rozmiar = $rozmiar / 1024; $rozmiar = round($rozmiar); $rozmiar = "$rozmiar kb"; }

else { $rozmiar = "$rozmiar b"; } Uwaga: pamiętajmy, Ŝe kaŝdy znak nowej linii zostanie zamieniony na zwykłą spację. Tak naprawdę na końcu kaŝdej linii odczytywanej przez PHP znajduje się niewidzialny dla nas, widoczny dla skryptu znak \n. MoŜna go za pomocą funkcji str_replace() zamienić na rozumny dla nas html-owe BR. Funkcja ta składa się z trzech argumentów pierwszy to poszukiwany znak/fraza, drugi to zmiennik dla poszukiwanego znaku/frazy, trzeci to przewaŝnie nazwa zmiennej, z której ma być zmieniana treść: $rozmiar = filesize("plik.txt"); $czytaj = fread($plik,$rozmiar); $czytaj = str_replace("\n","<br />",$czytaj); echo $czytaj; Zapisywanie informacji w pliku - fwrite() Funkcje odczytu znamy aŝ nadto, rozszerzmy teraz ją, oczywiście za pomocą znaczka plus. Funkcja ta będzie pozwalała nam na odczyt i dodatkowo na zapis. Wyraziłem się dokładnie dodatkowo, tzn. waŝniejszy jest odczyt i "rozbabrać" moŝemy dopiero plik po jego odczytaniu. Do zapisywania/dopisywania, czy w trybie r+, czy w, w+, a, czy a+ słuŝy ta sama funkcja fwrite() składająca się z dwóch argumentów pierwszy zawiera otwierany plik w jednym z powyŝej wymienionych trybów, a drugi zawiera frazę, ewentualnie nazwę zmiennej, która przechowuje dopisywany ciąg znaków. Oto przykład funkcji fwrite() w trybie r+:

$plik = fopen("plik.txt","r+"); Do naszego ciągu znaku, bez róŝnicy, czy było to asdf, czy Qwerty, czy coś innego powinniśmy dodatkowo ujrzeć wyraz tekst, oczywiście po odświeŝeniu, gdyŝ jest to zapisywane przed odczytaniem. A po odświeŝeniu oczywiście nie tylko zobaczymy tekst, ale w tle zostanie on zapisany po raz kolejny. Dwa tryby juŝ poznaliśmy. Teraz krótko omówmy sobie tryb w. Sam tryb odświeŝy nam plik usunie z niego wszystko i moŝemy w nim zapisywać treść od nowa. Oto przykład zastosowania tego trybu: $plik = fopen("plik.txt","w"); Uwaga: zmian nie jesteśmy w stanie zaobserwować korzystając z tego skryptu, ale są one naprawdę rejestrowane. MoŜemy się upewnić otwierając plik ujrzymy tam napis tekst, a w przypadku zmiany drugiego argumentu w funkcji fwrite() ujrzymy inny ciąg znaków. Tryb w+ umoŝliwia nam odczytanie tego, co zostało na nowo zapisane w pliku tekstowym. W przykładowym kodzie, który zaraz pojawi się ujrzymy nową funkcję - fseek(), która jest odpowiedzialna za umieszczenie wskaźnika. Zawiera dwa argumenty, najczęściej zmienną z otwieranym plikiem i obowiązkowo cyfrę oznaczającą pozycję wskaźnika wyraŝoną w liczbie, którą najczęściej jest zero. Przykład zastosowania trybu w+: $plik = fopen("plik.txt","w+"); fseek($plik,0);

Uwaga: tutaj teŝ poprzez odświeŝanie moŝemy uwaŝać, Ŝe zmiana nie została wprowadzona, ale zmieniając odpowiedni argument funkcji fwrite() wszystko się wyjaśni. Uwaga: funkcji fseek moŝemy uŝywać w wielu przypadkach, nie tylko w danym trybie, takŝe w innych trybach zapisująco-odczytujących, a takŝe i w samych odczytujących. TakŜe za pomocą tej funkcji moŝemy czytać z następnych linijek. Tryb a pozwala na dopisywanie treści do pliku juŝ istniejącego. Kod jest podobny do kodu dla trybu w, na którym się wzorowałem, jednakŝe ten tryb nie traktuje tak drastycznie wpisanych juŝ znaków np.: $plik = fopen("plik.txt","a"); Tryb a+ jest podobny do trybu r+, jednakŝe w przeciwieństwie do r+ zmiany widzimy natychmiast: $plik = fopen("plik.txt","a+"); fseek($plik,0); Uwaga: bardzo częstym błędem młodych programistów jest zapominanie o funkcji pozwalającej na przemieszczenie pozycji kursora funkcji fseek(). Uwaga: większość trybów została przedstawiona za pomocą wyświetlania danej linijki, oczywiście moŝemy takŝe uŝyć innych poznanych z tej lekcji funkcji odczytujących.

Oto prosty skrypt pozwalający bardziej ciekawie dopisać coś do bazy danych: if ($_POST[fraza] == TRUE) { $plik = fopen("plik.txt","a+"); fwrite($plik,$_post[fraza]); fseek($plik,0); echo "Zawartość danego pliku to <PRE>$linia</PRE>"; } else { echo "<FORM ACTION=\"index.php\" METHOD=\"post\"> Wpisz coś, co zostanie zapisane w pliku:<br /> <INPUT TYPE=\"tekst\" NAME=\"fraza\"><br /> <INPUT TYPE=\"submit\" VALUE=\"Dodaj to!\"> </FORM>"; } Bezpieczne modyfikowanie plików, blokowanie: flock() Przechowywanie danych w plikach naraŝa nas na pewne niebezpieczeństwo. Wyobraźmy sobie sytuację, Ŝe jednocześnie na stronę wchodzą dwie osoby. Na danej stronie znajduje się licznik odsłon. Sytuacja jest taka, Ŝe dwie osoby mają identyczne łącza, bez Ŝadnych przeciąŝeń itp. Serwer naraz otwiera dwa pliki, podwyŝsza liczbę naraz je zamyka. MoŜe wywołać to całkiem spore błędy licznik moŝe zapisać zupełnie inną liczbę, albo nawet zamiast cyfr wyświetlić tekst :). śeby uniknąć takich sytuacji stosujemy funkcję flock() (ang. plik zablokuj). Składa się ona z dwóch argumentów, z których pierwszym jest otwierany plik, a drugi moŝe mieć wartość: 1 - moŝliwy tylko odczyt 2 - moŝliwy tylko zapis 3- odblokowanie pliku

Przykładowy skrypt z zastosowaniem blokowania to: $plik = fopen("plik.txt","a+"); flock($plik,2); flock($plik,3); flock($plik,1); fseek($plik,0); flock($plik,3); Teraz juŝ nie musimy martwić się o jakiekolwiek błędy w naszych skryptach. Nadawanie CHMODów za pomocą PHP Na koniec długiej lekcji słówko o CHMODach. MoŜemy je ustawiać za pomocą klienta FTP, aczkolwiek nie tylko. Za pomocą funkcji chmod(), w której pierwszym argumentem będzie lokalizacja do pliku, a drugim określony CHMOD poprzedzony zerem moŝemy te parametry zmieniać. Dla przykładu, chcemy przestawić CHMOD naszego pliku plik.txt na np.: 666 (jeŝeli plik ma takie atrybuty, zmieńmy je na chwilę, aby zaobserwować zmiany): chmod("plik.txt",0666);