Programowanie w internecie (tworzenie dokumentów dynamicznych, aplikacje WWW) Tematy: Język PHP: elementy języka obsługa formularzy obsługa plików obsługa bazy danych identyfikacja użytkowników: ciasteczka, sesje, logowanie programowanie obiektowe przygotowanie projektu Frameworki (CakePHP), CMS-y (Wordpress) Technologia AJAX. Formaty XML, JSON. Aplety Java. Technologia CGI. Technologia servletów Java Serwer WWW Apache: konfiguracja, dziennik serwera. Bezpieczeństwo aplikacji WWW
Literatura Podstawowa: L. Welling, L. Thomson. PHP i MySQL : tworzenie stron WWW. Uzupełniająca: K. Barteczko. Java od podstaw do technologii. T. 2 E. Castro. Perl i Cgi : nauka pisania skryptów. Online: http://php.net/docs.php http://www.w3schools.com/php/ (References i inne) http://webmaster.helion.pl/index.php/kurs-php (w języku polskim) Strony domowe: MySQL, Java, Perl, Apache
Wykład 1: Dokumenty dynamiczne Elementy języka PHP
Architektura usługi WWW Usługa WWW (World Wide Web - ogólnoświatowa pajęczyna): usługa w internecie polegająca na udostępnianiu informacji za pomocą dokumentów hipertekstowych. Usługa wymaga dwóch stron: 1. klienta, która żąda usługi 2. serwera, który usługę wykona (z ang. serve - służyć, obsługiwać) Ponadto potrzebny jest protokół, który opisuje sposób komunikowania się między klientem a serwerem. Klient i serwer to programy. Ale komputer (mówi się też host), na którym jest uruchomiony serwer też nazywany jest serwerem. W usłudze WWW: klientem jest przeglądarka (mówi się klient www): Chrome, Firefox, Internet Explorer, Opera, Safari serwerem jest serwer www: Apache (najpopularniejszy), Internet Information Services (Microsoft), Nginx, Google Web Serwer, Sun Java System Web Server używany jest protokół http (Hyper Text Transfer Protocol - protokół przesyłania hipertekstu). Dlatego mówi się też klient http, serwer http.
Dokument statyczny. Dokumenty dynamiczny. Dokument statyczny - plik HTML (może to być także plik HTML z osadzonym kodem CSS i JavaScript). Serwer wysyła do przeglądarki zawartość tego pliku Dokument dynamiczny - plik skryptowy lub wykonywalny. Uruchomienie pliku generuje kod HTML (może także być generowany kod HTML z osadzonym kodem CSS i JavaScript). Serwer wysyła do przeglądarki to co zostało wygenerowane a nie zawartość tego pliku. Przez "dynamiczny" rozumiemy, więc nie interaktywność na stronie (np. wysuwane menu, wyświetlanie slajdów itp.), ale to że kod HTML jest generowany dynamicznie po stronie serwera (osadzenie JavaScriptu nie czyni dokumentu dynamicznym, bo JS przetwarzany jest po stronie przeglądarki a nie serwera). Przykłady: test.html, test2.html - dokumenty statyczne test.php - dokument dynamiczny Podstawy programowania w internecie (poprzedni semestr) - dokumenty statyczne Programowanie w internecie (ten semestr) - dokumenty dynamiczne (głównie) Koncepcja dokumentu dynamicznego i realizacja tej koncepcji zaczęła się w roku 1993. Przed 1993 serwery obsługiwały tylko dokumenty statyczne.
Realizacja usługi WWW (dokument statyczny) 1. Użytkownik wprowadza w przeglądarce adres URL (Uniform Resource Locator) zasobu (RESOURCE) np.: http://logika.uwb.edu.pl/mg/zajecia/test.html Zasób w tym przykładzie to test.html - jest to dokument statyczny 2. Przeglądarka wysyła do serwera www, który obsługuje domenę logika.uwb.edu.pl żądanie (REQUEST) pobrania zasobu. 3. Serwer odszukuje zasób test.html w strukturze katalogów (w naszym przykładzie test.html znajduje się w mg/zajecia) i wysyła do przeglądarki ZAWARTOŚĆ test.html jako odpowiedź (RESPONSE) 4. Przeglądarka wizualizuje zawartość html
Realizacja usługi WWW (dokument dynamiczny) Teraz w przeglądarce wpiszmy adres http://logika.uwb.edu.pl/mg/zajecia/test.php test.php jest dokumentem dynamicznym Realizacja usługi różni się z poprzednim slajdem tylko w p. 3: 3. Serwer odszukuje zasób test.php w strukturze katalogów. Zasób jest dokumentem dynamicznym, więc serwer nie wysyła jego zawartości, ale przekazuje go do przetworzenia dla swojego modułu. Wynikiem przetworzenia jest wygenerowany kod HTML, który serwer wysyła do przeglądarki jako odpowiedź na żądanie. Uwaga: test2.html nie jest dokumentem dynamicznym. Serwer nie przetwarza tego pliku tylko wysyła jego zawartość do przeglądarki. Dopiero przeglądarka przetwarza osadzony tam skrypt JavaScript, który generuje kod HTML.
W jakim języku tworzymy dokumenty dynamiczne PHP - język skryptowy interpretowany, najpopularniejszy i najłatwiejszy. Na zajęciach dokumenty dynamiczne będziemy głównie tworzyć w tym języku. Inne języki, m.in.: Perl - język skryptowy kompilowany Java - dokument dynamiczny (zwany serwletem Javy) to plik z kodem pośrednim Javy C/C++ - dokument dynamiczny ma postać pliku wykonywalnego
Od czego zacząć tworzenie dokumentów dynamicznych Potrzebujemy serwera WWW! Potrzebujemy modułu z interpreterem PHP (jeśli chcemy tworzyć dokumenty dynamiczne w PHP) "Działanie" dokumentu dynamicznego można sprawdzić w przeglądarce tylko przez wysłanie żądania do serwera. Uwaga: Nie można sprawdzić dokumentów dynamicznych tak jak mogliśmy sprawdzać statyczne czyli w przeglądarce: Plik - Otwórz albo 2 klikając na pliku albo w Notepad++ "Uruchom w "
Instalacja Można niezależnie zainstalować serwer (popularnym serwerem jest Apache http://www.apache.org/) i interpreter PHP (http://php.net/ ). Ale można od razu zainstalować wszystko (wygodnie) korzystając z pakietu instalacyjnego XAMPP https://www.apachefriends.org/pl/ Zostanie zainstalowany m.in. serwer www, moduł z interpreterem PHP i baza danych (przyda się w przyszłości): X jak cross platform, pakiet XAMPP dostępny dla różnych okienkowych systemów operacyjnych: Windows, systemy klasy UNIX: Linux, (Mac) OS X A jak Apache (serwer WWW) M jak Mysql - system baz danych. Od roku 2015 w pakiecie XAMPP zamiast Mysql jest system baz danych o nazwie MariaDB P jak PHP (instalacja m.in. interpretera) P jak Perl (instalacja m.in. interpretera) Instalacja intuicyjna, podać katalog instalacji i jakie elementy z pakietu chcemy zainstalować, automatycznie się konfiguruje, bezpłatny. W sali 407 XAMPP jest zainstalowany.
Pierwszy dokument dynamiczny (cz. 1) Uruchamiamy serwer: Włączamy panel sterowania XAMPP: Start - Programy - XAMPP - Panel sterowania (Control Panel) i uruchamiamy serwer Apache: Start w kolumnie Actions dla modułu Apache Plik z dokumentem dynamicznym np. test.php umieszczamy w katalogu w: xampp/htdocs gdzie xampp to katalog, gdzie zainstalowaliśmy pakiet programów xampp Do tworzenia dokumentów dynamicznych będzie używali języka PHP, więc plik musi mieć rozszerzenie php nie html W przeglądarce wpisujemy adres strony: http://localhost/test.php lub http://127.0.0.1/test.php Dla serwerów działających lokalnie (lokalnych hostów) zarezerwowany jest adres 127.0.0.1 (zamiennie można stosować adres nazwowy: localhost)
Pierwszy dokument dynamiczny (cz. 2) Domyślnie serwer po otrzymaniu żądania zaczyna szukać dokumentu test.php zaczynając od katalogu htdocs A zatem jeśli dokument test.php umieścilibyśmy w lokalizacji htdocs/mg/pwi/test.php to jest on pod adresem: http://127.0.0.1/mg/pwi/test.php lub http://localhost/mg/pwi/test.php Czyli w adresie URL po nazwie hosta "localhost" należy podać ścieżkę w stosunku do katalogu htdocs
Elementy języka PHP
Wprowadzenie PHP - "PHP: Hypertext Preprocessor" - akronim rekursywny (początkowo "Personal Home Page Tool") Język skryptowy opracowany z myślą o tworzeniu dokumentów dynamicznych Łatwy do opanowania Szybki i oszczędza zasoby serwera Dostępny dla wielu systemów operacyjnych i serwerów WWW (szczególnie popularny w systemie Linux w połączeniu z serwerem Apache) Rozwijany na zasadach Open Source (darmowy, rozszerzalny, pojawiające się w nim błędy są szybko wykrywane i poprawiane) Wiele stron www pomocnych w nauce PHP: wsparcie, rozwiązania typowych problemów i przykłady kodu Składnia przypomina C
Jakiego edytora używać do tworzenia dokumentów w PHP Można korzystać z Notepad++. Poza tym jest wiele edytorów wyspecjalizowanych dla PHP Można też użyć środowiska programistycznego Javy: Netbeans
Zasady tworzenia dokumentów w PHP Dokument zapisujemy z rozszerzeniem php Kod PHP należy umieścić jako zawartość znacznika <?php?> czyli: <?php?> tu kod PHP...
Zmienne, instrukcja przypisania, komentarze Nazwy zmiennych w PHP poprzedza się znakiem $ Wielkość liter w nazwach ma znaczenie Zmiennych nie trzeba deklarować przed użyciem Tak jak w JS: o nie trzeba deklarować typu zmiennej o tej samej zmiennej możemy przypisywać wartości różnych o instrukcja przypisania: znak równości Przykład: $wiek = 30; // zmiennej jest przypisana wartość typu liczbowego $wiek = "trzydzieści lat" ; // a teraz jest przypisana wartość typu String Komentarz jednoliniowy: // lub # Komentarz blokowy: /* */
Funkcja echo() wypisuje tekst na wyjście. Funkcja echo() Argumentu dla tej funkcji nie trzeba podawać w nawiasach. Oba warianty poprawne echo ('test'); echo 'test'; Jeśli argument dla funkcji echo ograniczymy apostrofami to zmienne nie będą parsowane, a jeśli ograniczymy cudzysłowem (podwójny apostrof) to będą (w miejsce zmiennej będzie wstawiona jej wartość). Przykład: $wiek = 30; echo 'Mam $wiek lat.'; // funkcja zwróci tekst: echo "Mam $wiek lat."; // funkcja zwróci tekst: Mam $wiek lat. Mam 30 lat.
Łączenie napisów (Konkatenacja) Napisy łączymy za pomocą operatora kropki:. Przykład 1: $tekst = 'P'. 'HP'; // czyli zmienna $tekst ma wartość: PHP Przykład 2: $wiek = 30; echo 'Mam '. "$wiek lat"; // zwróci tekst: Mam 30 lat Ale wiemy z poprzedniego slajdu, że powyższą instrukcję można zapisać prościej: echo "Mam $wiek lat."; Uwaga: W JS operator + oznaczał konkatenację i dodawanie. Była niejednoznaczność czy 1+2 to 3 czy 12. W PHP tego problemu nie będzie bo do konkatenacji służy. a do dodawania +
Operatory arytmetyczne: + - * / % ++ -- konkatenacja:. przypisania: =.= += -= *= /= %= porównania:!= > < >= <= oraz == (równe)!= (nierówne) === (identyczne: równe i tego samego typu)!== (nieidentyczne) $x = 4; $x == '4' // prawda $x === '4' // fałsz logiczne:! &&
Źródło: "Aplikacje WWW", http://wazniak.mimuw.edu.pl/ PHP - instrukcje sterujące instrukcja: instrukcja pojedyncza lub blok instrukcji w nawiasach klamrowych W instrukcjach pętli można używać instrukcji break i continue Instrukcja foreach (zob. slajd 24): łatwiejszy przebieg tablicy (w C nie ma takiej instrukcji) Jest także pętla: do instrukcja while (wyrażenie) oraz operator warunkowy: (wyrażenie)? wartość_gdy_wyrażenie_prawdziwe : wartość_gdy_fałszywe; Przykład: $liczba = 1; $parzystosc = ($liczba % 2 == 0)? "parzysta" : "nieparzysta";
Tablice 1. Tablica w PHP jest uporządkowaną mapą przyporządkowującą wartości (value) do kluczy (key) 2. Kluczami (indeksami) w tablicach PHP mogą być: liczby całkowite: 0,1,2,3,... albo napisy (W tym przypadku są to tzw. tablice asocjacyjne - associative array) Przykład, gdy kluczami są liczby całkowite: Utworzenie i wypełnienie tablicy, metoda I: $kolory = array('biały', 'czarny'); $kolory[0] ma wartość biały, $kolory[1] ma wartość czarny Utworzenie i wypełnienie tablicy, metoda II: $kolory[0] = 'biały'; $kolory[1] = 'czarny';
PHP - tablice (cz. 2) Przykład, gdy kluczami są napisy: Utworzenie i wypełnienie tablicy, metoda I: $osoba = array( ); 'imie' => 'Adam', 'wiek' => 30 Powstanie tablica dwuelementowa. Elementami są Adam i 30, których kluczami są odpowiednio imie i wiek Utworzenie i wypełnienie tablicy, metoda II: $osoba['imie'] = 'Adam'; $kolor['wiek'] = 30; Można również definiować tablice wielowymiarowe.
PHP - tablice (cz. 3) Standardowy sposób na odczytanie elementów tablicy: for ($i=0;$i<count($kolory);$i++) { echo "$kolory[$i] ";} // wypisze: biały czarny Ale w ten sposób nie da się odczywać elementów tablicy asocjacyjnej W przypadku tablic asocjacyjnych stosujemy funkcję foreach: foreach ($osoba as $v) { echo "$v "; } // wypisze: Adam 30 Można także wypisać wartości razem z kluczami foreach ($osoba as $k => $v) { echo "$k - $v " ; } // wypisze: imie - Adam wiek - 30 Wyjaśnienie: Zmienna $k "przebiega" klucze-indeksy (key, stad nazwa zmiennej $k) tablicy osoba Zmienna $v "przebiega" wartości (value, stad nazwa zmiennej $v) tablicy osoba Ale można te zmienne nazwać dowolnie. Pętla foreach może być także stosowana do tablicy zwykłej, gdzie kluczami są liczby foreach ($kolory as $v) { echo "$v "; } // wypisze: biały czarny Przykład: tablice.php
PHP - tablice (cz. 4) Tablice w PHP można są dynamiczną strukturą danych. Mamy wiele funkcje bibliotecznych, które umożliwiają wykonywanie operacji na tablicach m.in. dodawanie elementu na początku lub na końcu tablicy oraz usuwanie elementu z początku lub końca tablicy. Użyteczne funkcje: sizeof(), array_push(), array_pop(), array_unshift(), array_shift(), array_merge(), array_keys(), array_values(), shuffle() Więcej: http://www.php.net/array
Funkcje function wypisztytul($txt) { } echo '<h1>'. $txt. '</h1>'; function dodaj($skladnik1, $skladnik2) { $wynik = $skladnik1 + $skladnik2; return $wynik; } Przykłady wywołania funkcji: wypisztytul('rozdział 1'); echo dodaj(3,5); Przykład: funkcje.php Funkcje można definiować rekurencyjnie
Debugowanie skryptu PHP O ile nie zmieniono domyślnych ustawień w pliku konfiguracyjnym xampp/php/php.ini to błędy, ostrzeżenia, uwagi będą wyświetlane w przeglądarce. Wyświetlanie tych informacji jest przydatne na etapie tworzenia strony. Gdy strona jest już opublikowana warto wyłączyć wyświetlanie takich informacji ze względów bezpieczeństwa. Dostęp do php.ini: w panelu sterowania XAMPP kliknąć "config" dla serwisu Apache i wybrać php.ini. Tam zmienne error_reporting oraz display_errors (w tym pliku w komentarzu jest wyjaśnione jakie mogą być wartości tych zmiennych). Po zmianach w php.ini należy zrestartować serwer. Inna możliwość: Skrypt php można uruchomić pod konsolą i tam zobaczyć jakie są błędy. W Windows polecenie: php nazwa_pliku.php
Inne informacje
Stałe Zdefiniowanie stałej: define("podatek", 0.19); Odwołanie się do stałej, nie wpisujemy symbolu dolara tak jak dla zmiennych: echo "Podatek wynosi: ". PODATEK; // zwróci tekst: Podatek wynosi 0.19 Jeśli stałą zdefiniujemy tak: define("podatek", 0.19, true); to wielkość liter nie ma znaczenia i do stałej można się odwołać: PODATEK, podatek, Podatek itd. Wydruk tablicy wszystkich stałych: print_r(get_defined_constants());
Typy danych Boolean Integer Float albo Double String Object Resource NULL (zmienna zadeklarowana ale nie zainicjalizowana czyli nieprzypisana wartość) Funkcje sprawdzające czy wartość jest określonego typu: Rodzina funkcji: is_* Przykłady: is_null(), is_int(), is_bool(), is_numeric() itd. zwracają true jeśli wartość jest określonego typu, false jeśli nie jest $wiek = 30; is_int($wiek) zwróci true
Źródło: "Aplikacje WWW", http://wazniak.mimuw.edu.pl/ Funkcja echo() wypisuje tekst na wyjście Przeplot w przykładzie po prawej jest poprawny: PHP traktuje tekst pomiędzy <?php oraz?> jak gdyby był on argumentem funkcji echo(). Termin "wyskakiwanie z HTML" oznacza przejście do trybu PHP