Komunikacja między klientem, a skryptem PHP, oraz 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()

Systemy internetowe Wykład 3 PHP

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Laboratorium 1 Wprowadzenie do PHP

Wprowadzenie do Internetu Zajęcia 5

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

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

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

Aplikacje WWW - laboratorium

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

Wysyłanie pliku na serwer. Plik na serwerze.

Ćwiczenie 7 - PHP (3)

Aplikacje internetowe - laboratorium

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

SSK - Techniki Internetowe

Wykład 5: PHP: praca z bazą danych MySQL

Instrukcje dołączania plików

Na początku utworzymy formularz w czystym języku HTML i przetestujemy go za pomocą przeglądarki WWW.

Podstawy JavaScript ćwiczenia

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Aplikacje internetowe

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

Formularze HTML. dr Radosław Matusik. radmat

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Modele danych walidacja widoki zorientowane na model

Internetowe bazy danych

Michał Bielecki, KNI 'BIOS'

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

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

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

Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl

Ćwiczenie: JavaScript Cookies (3x45 minut)

PHP: bloki kodu, tablice, obiekty i formularze

Technologie sieciowe Sprawozdanie z labolatorium. Lista 5

PHP daje nam możliwość wysłania wiadomości bezpośrednio z poziomu kodu. Służy do tego funkcja mail().

12. OPERACJE NA PLIKACH

Wykład 03 JavaScript. Michał Drabik

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

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

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

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

Formularze. 1. Formularz HTML

PHP w-3. Sterowanie w PHP

Programowanie internetowe

Dokonaj analizy poniŝszego kodu i na jego podstawie wyświetl w oknie przeglądarki swoje Imię oraz Nazwisko przy uŝyciu instrukcji echo i print

Zajęcia 10 obsługa formularzy w PHP

Bazy Danych i Usługi Sieciowe

14. POZOSTAŁE CIEKAWE FUNKCJE

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

Podstawy technologii WWW

Aplikacje WWW - laboratorium

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Autor: Joanna Karwowska

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

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

PHP5. Praktyczny kurs

SMS Kod Automatyczny

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Obiektowe bazy danych

Zajęcia 4 - Wprowadzenie do Javascript

Przykładowa integracja systemu tpay.com KIP S.A. ul. Św. Marcin 73/ Poznań.

Zaawansowane aplikacje internetowe

Podstawy technologii WWW

Umieszczanie kodu. kod skryptu

Bazy danych i strony WWW

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

FORMULARZE. G. Przęczek

FORMULARZE Formularz ma formę ankiety, którą można wypełnić na stronie. Taki formularz może być np. przesłany pocztą elektroniczną .

Podstawy programowania w języku C++

PHP i MySQL dla każdego / Marcin Lis. Wyd. 3. Gliwice, cop Spis treści

Baza danych do przechowywania użytkowników

Przykładowa integracja systemu Transferuj.pl

Laboratorium 7 Blog: dodawanie i edycja wpisów

Dokumentacja smsapi wersja 1.4

Należy ściągnąć oprogramowanie Apache na platformę

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

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

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

Zasady programowania Dokumentacja

Programowanie w językach wysokiego poziomu

Funkcje i instrukcje języka JavaScript

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

Grafika PHP dla początkujących

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Zmienne i stałe w PHP

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

TRX API opis funkcji interfejsu

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

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

Przykład programu w PHP. Wykład10.PHP ciągdalszy,str.1

Cw.12 JAVAScript w dokumentach HTML

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Smarty PHP. Leksykon kieszonkowy

Systemy operacyjne 11

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

Pliki. Wywołanie fopen ma schematyczną postać: fopen('nazwa_pliku', 'tryb_otwarcia')

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

Transkrypt:

Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach Zasady tworzenia stron w PHP z jednym plikiem głównym Aplikacje oraz strony WWW bardzo często tworzy się tak, że do jednego dokumentu głównego, dołączane są pozostałe dokumenty / pliki w zależności od potrzeb i wymagań funkcjonalnych serwisu WWW, czy aplikacji. Z reguły plikiem głównym jest plik "index.php". Aby do tego pliku dołączyć dodatkowy skrypt używa się wbudowanych funkcji PHP tj.: include('nazwapliku.php') lub require('nazwapliku.php'). Najważniejszą różnicą pomiędzy obiema funkcjami jest to, że przy wykorzystaniu require(), plik zostanie zawsze wstawiony. Stanie się tak nawet, jeśli funkcję tą umieści się wewnątrz instrukcji warunkowej, której warunek nie zostanie spełniony. W takim samym przypadku korzystając z funkcji include() plik nie zostanie wstawiony ponieważ to polecenie w wyniku nie spełnienia warunku nie zostanie zinterpretowane. Drugą różnicę stanowi ilość dołączeń pliku przy wielokrotnym wykonaniu funkcji. Kiedy parser PHP napotka funkcję include() wtedy wstawia aktualną zawartość pliku, natomiast w przypadku kolejnych wywołań funkcji require() zostaną użyte dane wstawione w za pierwszym razem. Stanie się tak nawet, jeśli parser PHP ponownie napotka funkcję require() odnoszącą się do tego samego pliku. Rozróżnia się jeszcze funkcje include_once() i require_once(), które wstawiają plik tylko podczas pierwszego wystąpienia. Przykładowy plik "index.php" mógłby wyglądać tak: require_once('./biblioteki/biblioteka1.php'); if (isset($_get['modul']) && $_GET['modul'] == 'strona_glowna') include('./moduly/modul_strona_glowna.php'); Funkcja isset() służy do sprawdzania czy zmienna podana w parametrze funkcji istnieje. Zwraca wartość true jeśli zmienna istnieje lub false jeśli nie. W powyższym przykładzie jeśli istnieje element tablicy $_GET['modul'] i ten element zawiera wartość "strona_glowna" wtedy dołączony zostanie plik "./moduly/modul_strona_glowna.php". Zamiast instrukcji if() możliwe jest użycie instrukcji switch() aby np. dołączyć większą liczbę plików w zależności od wartości zmiennej $_GET['modul']. Poniżej przykład Podczas projektowania aplikacji internetowych oraz stron WWW korzysta się ze wzorców projektowych. Jednym z powszechnie znanych i stosowanych wzorców tworzenia stron w PHP jest wzorzec MVC oraz wzorce od niego pochodne. Aplikacja napisana według wzorca MVC się na 3 warstwy: warstwa modelu - służy wyłącznie do pozyskiwania danych, warstwa kontrolera - decyduje, który model i widok ma być użyty w danym momencie, warstwa widoku - zajmuje się wyłącznie wyświetlaniem danych z dostarczonych z modelu. 1

Metody GET i POST protokołu HTTP Do odbierania żądań służą dwie predefiniowane tablice asocjacyjne: $_GET[] i $_POST[]. W tablicy $_GET[] przechowywane są zmienne zawarte w adresie URL strony po znaku zapytania, np. adres "http://localhost/index.php?modul=strona_glowna&akcja=pokaz" zawiera dwie zmienne "modul" i "akcja", które mają odpowiednio wartości "strona_glowna" i "pokaz". Kod: echo 'Moduł to '.$_GET['modul'].', a akcja to '.$_GET['akcja']; dla powyższego adresu URL wyświetli napis: "Moduł to strona_glowna, a akcja to pokaz"; Z tablicy $_POST[] korzysta się w identyczny sposób, natomiast zmienne w niej przechowywane nie są częścią adresu URL. Tablicę $_POST[] wykorzystuje się z reguły do przesyłania danych z formularzy HTML. Poniżej znajduje się kod skryptu, który za pomocą formularza HTML (plik formularz.php) pobiera od użytkownika Imię i Nazwisko, a potem je wyświetla. // Plik formularz.php <form action="index.php" method="post"> <div><span>imię: </span> <input type="text" name="imie" value="" /></div> <div><span>nazwisko: </span> <input type="text" name="nazwisko" value="" /></div> <div><input type="submit" value="wyślij" /></div> </form> // Plik index.php if (isset($_post['imie']) && isset($_post['nazwisko'])) echo $_POST['imie']. ' '. $_POST['nazwisko']; else include('formularz.php'); Po uruchomieniu skryptu (pliku index.php) zostanie sprawdzone czy istnieją dwa elementy tablicy $_POST: "imie" i "nazwisko". Jeśli nie istnieją to do dokumentu zostanie wstawiony plik z formularzem. Po uzupełnieniu formularza i naciśnięciu przycisku "Wyślij" wszystkie dane z tego formularza zostaną wysłane do skryptu "index.php" (action="index.php") za pomocą metody POST (method="post"). Adres widoczny w przeglądarce w ogóle się nie zmieni, warunek zostanie spełniony, ponieważ teraz elementy tablicy $_POST[] istnieją i zostanie wyświetlona ich zawartość. Jeśli w polu "Imię" zostało wpisane "Anna", a w polu "Nazwisko" - "Kowalski" to wyświetlony zostanie napis "Anna Kowalski". Jeśli dane z formularza przesyłane były metodą GET to adres w przeglądarce wyglądałby tak: http://localhost/index.php?imie=anna&nazwisko=kowalski. 2

Formularz internetowy umożliwia również przesyłanie użytkownikowi plików na serwer. Taki formularz należy uzupełnić o pole "input" typu "file" i dołożyć atrybut enctype="multipart/form-data do znacznika <form>. // Plik formularz.php <form action="index.php" method="post" enctype="multipart/form-data"> <div><span>opis obrazka: </span> <input type="text" name="opis" value="" /></div> <div> <input type="file" name="plik" accept="image/jpeg,image/gif" /> </div> <div><input type="submit" value="wyślij" /></div> </form> // PLik index.php if (is_uploaded_file($_files['plik']['tmp_name'])) $max = 1024 * 2; // 2MB $wielkosc_pliku = $_FILES['plik']['size']; $typ_pliku = $_FILES['plik']['type']; $nazwa_pliku = $_FILES['plik']['name']; $tymczasowa_nazwa_pliku = $_FILES['plik']['tmp_name']; $miejsce_docelowe = './obrazki/'. $nazwa_pliku; if ($wielkosc_pliku <= 0) echo 'Plik jest pusty.'; elseif ($wielkosc_pliku > $max) echo 'Plik jest za duży maksymalnie można wysłać '. $max. '.'; elseif (file_exists($miejsce_docelowe)) echo 'Wczytywany plik już istnieje na serwerze.'; else if (!@move_uploaded_file($tymczasowa_nazwa_pliku, $miejsce_docelowe)) echo 'Podana lokalizacja nie istnieje'; else echo 'Przesyłanie pliku zakończyło się pomyślnie.'; Funkcja is_uploaded_file() sprawdza czy plik został przesłany przez formularz. Wszystkie informacje o przesłanych plikach znajdują się w predefiniowanej tablicy $_FILES[]. Tablica zawiera tyle elementów ile jest pól typu "file" w formularzu HTML. Informację dotyczące konkretnego pliku przesłanego na serwer zawarte są w podtablicy każdego elementu tablicy $_FILES[]. Poniżej opis paru pól tej podtablicy: $_FILES['NazwaPolaTypuFile']['name'] - nazwa przesyłanego pliku; $_FILES['NazwaPolaTypuFile']['tmp_name'] - tymczasowa nazwa pliku na serwerze. Plik po przesłaniu trafia do tymczasowego katalogu. $_FILES['NazwaPolaTypuFile']['size'] - wielkość pliku w bajtach; $_FILES['NazwaPolaTypuFile']['type'] - typ pliku w formacie MIME, np.: image/gif, image/jpeg; Po sprawdzeniu czy wielkość pliku mieści się w określonych granicach i czy taki plik nie znajduje się już w katalogu docelowym, można plik bezpiecznie przenieść z katalogu tymczasowego do 3

katalogu docelowego. Należy pamiętać, że do katalogu docelowego skrypt musi mieć dostęp, czyli muszą być ustawione właściwe prawa dostępu - dotyczy to np. systemu Linux. Mechanizm Sesji Protokół HTTP jest protokołem bezstanowym, co oznacza, że serwer rozpatruje każde żądanie indywidualnie nie korelując go z konkretnym użytkownikiem. Jest to kłopotliwe w przypadku wszelkiego rodzaju systemów autoryzacji i wtedy właśnie można wykorzystać mechanizm sesji. Aby rozpocząć sesję wystarczy użyć funkcji session_start(). Funkcja ta musi zostać użyta przed wysłaniem jakichkolwiek informacji do klienta, dotyczy to nawet informacji pochodzących z nagłówka HTML. Wszystkie dane sesji przechowywane są w predefiniowanej tablicy $_SESSION[]. Poniżej znajduje się prosty przykład pokazujący ilość odświeżeń danej strony. session_start(); if (!isset($_session['licznik'])) $_SESSION['licznik'] = 1; else $_SESSION['licznik'] = $_SESSION['licznik'] + 1; echo 'Ilość odświeżeń strony podczas aktualnej sesji: '. $_SESSION['licznik']. '<br />'; Na początku sprawdzane jest, czy istnieje zmienna sesyjna $_SESSION[licznik]. Jeśli nie istnieje to zostaje utworzona poprzez przypisanie do niej wartości początkowej 1. W przeciwnym razie, czyli jeśli zmienna taka już istnieje to jej wartość jest zwiększana o jeden. Następnie wyświetlana jest wartość tej zmiennej, która reprezentuje ilość odświeżeń danej strony. Poniżej przykład zresetowania takiego licznika: session_start(); if (isset($_get['resetuj']) && isset($_session['licznik'])) unset($_session['licznik']); if (!isset($_session['licznik'])) $_SESSION['licznik'] = 1; else $_SESSION['licznik'] = $_SESSION['licznik'] + 1; echo 'Ilość odświeżeń strony od ostatniego resetu: '.$_SESSION['licznik']; echo '<br />'; echo '<a href="index.php?resetuj=tak">resetuj licznik</a>'; W powyższym kodzie dodano linię, w której następuje sprawdzenie, czy istnieje zmienna $_GET['resetuj'] oraz czy istnieje zmienna $_SESSION['licznik']. Jeśli oba warunki są spełnione to zmienna sesyjna $_SESSION['licznik'] usuwana jest z tablicy. Następnie jeśli zmienna $_SESSION['licznik'] nie istnieje ustawia się jej wartość początkową. W ostatniej linii kodu znajduje się hiperłącze, przez które można zresetować licznik odwiedzin. 4

Podstawowe operacje na plikach tekstowych i binarnych Wszystkie funkcje do obsługi plików (oprócz tej otwierającej plik) jako parametr pobierają deskryptor, czyli tzw. wskaźnik do pliku. Jest to wartość zmiennej identyfikująca plik otwarty w systemie. Taki wskaźnik jest niezbędny ponieważ skrypt może korzystać jednocześnie z wielu plików i na wszystkich przeprowadzać operacje, takie jak odczyt, czy zapis. Poniżej znajduje się przykład jak odczytać plik tekstowy linia po linii: $plik = @fopen('nazwa_pliku.txt', 'r'); if ($plik) while (!feof($plik)) $linia = fgets($plik); echo $linia. '<br />'; fclose($plik); Funkcja fopen() służy do otwarcia pliku i zwraca uchwyt do niego - deskryptor. Pierwszym parametrem funkcji jest nazwa otwieranego pliku, a drugim tryb jego otwarcia. Aby móc odczytać plik drugi parametr musi mieć wartość "r". W pętli while()pobierane są kolejne linie tekstu z pliku za pomocą funkcji fgets(). Pętla wykonuje się tak długo, aż funkcja eof() zwróci wartość false. Następnie plik zostaje zamknięty po wykonaniu funkcji fclose(). Poniżej przykład jak odczytać całą zawartości pliku tekstowego do zmiennej: $nazwapliku = 'nazwa_pliku.txt'; $plik = fopen($nazwapliku, 'r'); $zawartosc_pliku = fread($plik, filesize($nazwapliku)); fclose($plik); echo 'Zawartość pliku tekstowego "'. $nazwapliku. '":<br />'. $zawartosc_pliku; Funkcja filesize() zwraca wielkość pliku w bajtach. Funkcja fread() odczytuje z pliku określoną ilość bajtów zadaną w drugim parametrze, a więc w powyższym przypadku odczytany zostanie cały plik. Zapisywanie do pliku zawartości tablicy: $tablica = array('linia pierwsza', 'linia druga', 'linia trzecia'); $plik = @fopen('nazwa_pliku.txt', 'w'); foreach ($tablica as $linia) fwrite($plik, $linia. "\r\n"); fclose($plik); Aby zapisać dane do pliku należy drugi parametr funkcji fopen() ustawić na wartość "w", jeśli plik nie istnieje to zostanie utworzony. Następnie w pętli foreach() za pomocą funkcji fwrite() zapisywana jest zawartość tablicy. Aby każda wartość elementu tablicy była zapisana w osobnej linii należy dołączyć do tej wartości znaki końca linii. W systemie Windows jest to "\r\n", a w systemach takich jak Linux "\n". Aby odczytać lub zapisać plik binarny wystarczy drugi parametr funkcji fopen() zamienić na "rb" dla odczytu lub "wb" dla zapisu. 5

Wyszukiwanie plików i katalogów Listowanie zawartości katalogu: $katalog = '.'; $tablica = scandir($katalog); foreach ($tablica as $nazwa) if (is_dir($nazwa)) echo '['. $nazwa. ']<br />'; else echo $nazwa. '<br />'; Powyższy przykład wyświetla zawartość bieżącego katalogu. Wszystkie nazwy katalogów zostaną umieszczone w kwadratowym nawiasie. Funkcja is_dir() sprawdza, czy podany element jest katalogiem. Jako katalogi zostaną także wyświetlone dwa specjalne katalogi. Pierwszy reprezentujący bieżący katalog, który jest opisany symbolem kropki ".", oraz drugi opisany przez dwie kropki "..", który reprezentuje katalog nadrzędny. 6