750 likes | 989 Views
Technologie internetowe II. Dr Krzysztof Heller. Literatura. Meloni J.C.: PHP, MySQL i Apache dla każdego. Wydanie III, Helion, 2007 Lis M.: PHP i MySQL dla każdego, Helion, 2005 Leszek 'leon' Krupiński: Wykłady internetowe, 2007. Plan wykładu 1. Podstawowe elementy języka PHP.
E N D
Technologie internetowe II Dr Krzysztof Heller
Literatura • Meloni J.C.: PHP, MySQL i Apache dla każdego. Wydanie III, Helion, 2007 • Lis M.: PHP i MySQL dla każdego, Helion, 2005 • Leszek 'leon' Krupiński: Wykłady internetowe, 2007 Technologie internetowe II
Plan wykładu 1 • Podstawowe elementy języka PHP. • Typy danych, stałe i zmienne, operatory i wyrażenia. • Instrukcje warunkowe i instrukcje pętli. • Tablice. Technologie internetowe II
Język PHP • PHP - język skryptowy służący do rozszerzania możliwości stron internetowych. • składnia bardzo podobna do popularnych języków programowania C/C++, lecz uproszczona • wbudowana obsługa wielu popularnych baz danych • dzięki połączeniu z biblioteką GD możliwe jest także dynamiczne tworzenie obrazków GIF (starsze wersje GD) lub PNG (nowsze wersje) Technologie internetowe II
Podstawy programowania PHP • Aby plik był rozpoznany przez serwer WWW jako skrypt PHP musi on mieć odpowiednie rozszerzenie. • Rozszerzenia są definiowalne w konfiguracji serwera WWW, zazwyczaj: • .php3 (dla PHP w wersji 3), • .php lub php4 (dla PHP w wersji 4), • .phtml (dla PHP w wersji starszej niż 3). • serwer będzie wiedział, że plik ten nie jest przeznaczony do bezpośredniego wyświetlenia (jak w przypadku plików HTML), ale że najpierw trzeba go przepuścić przez parser PHP Technologie internetowe II
Podstawy programowania PHP • Jeśli zwykłemu plikowi HTML nadamy rozszerzenie .php, to zostanie on prawidłowo wyświetlony • parser PHP przetwarzając stronę ma 2 tryby pracy: • HTML, gdzie cała treść jest wyświetlana, bez przetwarzania, • PHP, gdzie treść jest traktowana jako skrypt do przetworzenia. • Do określenia w pliku co jest kodem HTML a co PHP służą specjalne znaczniki. Początkowo parser jest w trybie HTML. Aby przejść do trybu PHP można użyć jednego z czterech znaczników: 1. skrócone: <? echo ("to jest najprostsza metoda, podobna do SGML'u\n"); ?>; uwaga - short_open_tag = on 2. standardowe: <?php echo("jeśli serwujesz pliki XML, użyj tej metody\n"); ?&>; 3. skryptowe: <script language="php"> echo ("niektóre edytory (np. FrontPage) nie lubią przetwarzania instrukcji"); </script> 4. ASP: <% echo ("Możesz też użyć metody podobnej do tej z ASP"); %> <%= ; # To jest skrót dla "<%echo .." %>; uwaga – asp_tags = on Technologie internetowe II
Podstawy programowania PHP • niby-funkcja echo • dla większości normalnych funkcji parametry trzeba podawać w nawiasach • w przypadku funkcji echo można je pominąć • "echo" jest elementem składni języka • służy do wysyłania tekstu podanego jako parametr do przeglądarki użytkownika • echo nie wysyła znaku końca linii, więc w miejscu końca linii trzeba wstawić '\n • funkcja print() – działanie podobne, zwraca wartość Technologie internetowe II
Pierwszy program <?php echo "Witaj sieci!"; ?> lub <?php print ("Witaj sieci!„); ?> Technologie internetowe II
Drugi program – łączenie z HTML <html> <head> <title>Skrypt PHP zawierający HTML</title> </head> <body> <b> <?php echo "witaj świecie"; ?> </b> </body> </html> Technologie internetowe II
Składnia • Zakańczanie - umieszczenie na końcu każdej instrukcji (niekoniecznie linii) znaku średnika (';'). • można pominąć gdy jest przejście do trybu HTML • Komentarz – zaznaczanie tekstu nie będącego programem. Są 3 sposoby: • Znak // • Znak # • Pomiędzy znakami /* a */ • Przykład: <? echo „cokolwiek"; // jak w C/C++ echo „cokolwiek 2"; # jak w UNIX shell /* komentarza w kilku liniach */ ?> Technologie internetowe II
Zmienne • Zmienne oznacza się za pomocą znaku dolara ('$') przed identyfikatorem. • Zmienna jest inicjalizowana przy pierwszym jej użyciu. • Nazwy zmiennych muszą zaczynać się od litery (dużej lub małej) lub "underscore" (dolna kreska - '_') a dalej mogą się składać z dowolnej ilości liter, cyfr i znaków o kodzie ASCII powyżej 127. • Przy nazwach zmiennych ważna jest wielkość znaków - zmienne $Test i $test to dwie różne zmienne. • Zmienne są widoczne tylko wewnątrz funkcji lub skryptu, w którym się znajdują. Technologie internetowe II
Przykłady użycia zmiennych <? $nazwa = 1; // Zmiennej "nazwa" przypisywana jest wartość liczbowa 1 $druga_nazwa = "Tekst"; /* Zmiennej "druga_nazwa" przypisany jest ciąg znaków "Tekst" */ $trzecia_nazwa = $nazwa; /* Zmiennej "trzecia_nazwa" przypisywana jest wartość zmiennej "nazwa" */ echo "To jest $druga_nazwa"; /* Powinien wyświetlić się napis "To jest Tekst" */ echo '$druga_nazwa'; // Powinien wyświetlić się napis "$druga_nazwa" echo $nazwa; // Powinna wyświetlić się cyfra 1 ?> Technologie internetowe II
Typy zmiennych • liczby całkowite (integer) • liczby rzeczywiste (double) • ciągi (string) • tablice (array) • obiekty (object) • PHP potrafi konwertować zmienne całkowite zapisane w różnych formatach liczbowych: <? $a = 1234; # liczba dziesiętna $a = -123; # liczba ujemna $a = 0123; # liczba ósemkowa (równoznaczne z dziesiętnym 83) $a = 0x12; # liczba szesnastkowa (równoznaczne z dziesiętnym 18) ?> Technologie internetowe II
Ustalenie typu • PHP sam ustala typ zmiennej, zależnie od kontekstu: <? $blah = "0"; // $blah jest ciągiem (ASCII 48) $blah++; // $blah jest ciągiem "1" (ASCII 49) $blah += 1; // $blah jest teraz wartością całkowitą (2) $blah = + 1.3; // $blah jest wartością rzeczywistą (1.3) $blah = 5 + "10 Malutkich Świnek"; // jest wartością całkowitą (15) $blah = 5 + "10 Małych Świń"; // jest wartością całkowitą (15) ?> Technologie internetowe II
Zmiana typu • Podczas przypisywania zmiennej nowej wartości, poprzednia wartość jest oczywiście zamazywana. W takim przypadku typ zmiennej ustalany jest od nowa. • Jeśli jednak zachodzi potrzeba zmiany typu lub PHP błędnie rozpoznaje typ, to można tego dokonać za pomocą rzutowania (cast - efekt jest jednorazowy) lub za pomocą ustalenia typu - funkcja settype (efekt trwały). Technologie internetowe II
Rzutowanie typu • Dozwolone typy rzutowań: • (int), (integer) - rzutuj do typu całkowitego • (real), (double), (float) - rzutuj do typu rzeczywistego • (string) - rzutuj do ciągu • (array) - rzutuj do tablicy • (object) - rzutuj do obiektu Technologie internetowe II
Rzutowanie typu <?php $nieokreslona = 3.14; $chwila = (double) $nieokreslona; echo "czy ".$chwila." jest typu double? ".is_double($chwila)."<br/>"; // double $chwila = (string) $nieokreslona; echo "czy ".$chwila." jest typu string? ".is_string($chwila)."<br/>"; // string $chwila = (integer) $nieokreslona; echo "czy ".$chwila." jest typu integer? ".is_integer($chwila)."<br/>"; // integer $chwila = (double) $nieokreslona; echo "czy ".$chwila." jest typu double? ".is_double($chwila)."<br/>"; // double $chwila = (boolean) $nieokreslona; echo "czy ".$chwila." jest typu boolean? ".is_bool($chwila)."<br/>"; // boolean echo "<hr/>"; echo "pierwotny typ zmiennej $nieokreslona: "; echo gettype($nieokreslona); // double ?> Technologie internetowe II
Ustalenie typu • Funkcja settype pobiera 2 argumenty. Pierwszym jest nazwa zmiennej do ustalenia typu, a drugim ciąg określający nowy typ zmiennej: • "integer" • "double" • "string" • "array" • "object" • Funkcja zwraca wartość "true" gdy wszystko poszło pomyślnie, w przeciwnym razie zwracana jest wartość "false". Technologie internetowe II
Ustalenie typu <?php $nieokreslona = 3.14; echo "czy ".$nieokreslona." jest typu double? ".is_double($nieokreslona)."<br/>"; // double settype($nieokreslona, 'string'); echo "czy ".$nieokreslona." jest typu string? ".is_string($nieokreslona)."<br/>"; // string settype($nieokreslona, 'integer'); echo "czy ".$nieokreslona." jest typu integer? ".is_integer($nieokreslona)."<br/>"; // integer settype($nieokreslona, 'double'); echo "czy ".$nieokreslona." jest typu double? ".is_double($nieokreslona)."<br/>"; // double settype($nieokreslona, 'bool'); echo "czy ".$nieokreslona." jest typu boolean? ".is_bool($nieokreslona)."<br/>"; // boolean ?> Technologie internetowe II
Testowanie typu <?php $testing; // deklaracja bez przypisania wartości echo "typ null? ".is_null($test); // sprawdza, czy wartość jest typu null $testing = 5; echo "typ integer? ".is_int($test); // sprawdza, czy wartość typu integer $testing = "five"; echo "typ string? ".is_string($test); // sprawdza, czy wartość typu string $testing = 5.024; echo "typ double? ".is_double($test); // sprawdza, czy wartość typu double $testing = true; echo "typ boolean? ".is_bool($test); // sprawdza, czy wartość typu boolean $testing = array('apple', 'orange', 'pear'); echo "tablica? ".is_array($test); // sprawdza, czy wartość typu array echo "wartość numeryczna? ".is_numeric($test); // sprawdza, czy wartość numeryczna echo "zasób? ".is_resource($test); // sprawdza, czy jest to zasób ?> Technologie internetowe II
Zmienne predefiniowane (superglobalne) • W każdym skrypcie PHP dostępne jest kilka zmiennych, których wartość jest ustalana na podstawie zmiennych środowiskowych serwera WWW. • Dostępne są jak zwykłe zmienne - ze znakiem dolara przed nazwą. • Zmienne dzielą się na: • ustawiane przez serwer WWW • ustawiane przez PHP Technologie internetowe II
Tablice • $_GET – zmienne przesłane do skryptu metodą GET • $_POST – zmienne przesłane do skryptu metodą POST • $_COOKIE – zmienne przesłane do skryptu metodą COOKIE • $_FILES – zmienne przesłane do skryptu przez wysłanie pliku • $_SERVER – wysłane nagłówki, ścieżkę do pliku, adres skryptu • $_ENV – wartości zmiennych środowiskowych serwera • $_REQUEST – zmienne przesłane do skryptu przez użytkownika • $_SESSION – zmienne zarejestrowane w aktualnej sesji Technologie internetowe II
Zmienne ustawiane przez serwer WWW • GATEWAY_INTERFACE - Informacja o specyfikacji CGI używanej przez serwer, np. 'CGI/1.1'. • SERVER_NAME - Nazwa hosta serwera na którym skrypt jest uruchamiany. Jeśli skrypt pracuje na wirtualnym hoście, to zmienna przyjmie jako wartość nazwę wirtualnego hosta. • SERVER_SOFTWARE - Ciąg identyfikujący serwera podawany przy odpowiadaniu na zapytania • SERVER_PROTOCOL - Nazwa i numer wersji protokołu za pomocą którego wysłano zapytanie o stronę, np. 'HTTP/1.0'; • REQUEST_METHOD - Metoda zapytania użyta do uzyskania dostępu do strony, np. 'GET', 'HEAD', 'POST', 'PUT'. • QUERY_STRING - Ciąg zapytania (jeśli takowy istnieje) za pomocą którego połączono się ze stroną. • DOCUMENT_ROOT - Katalog główny drzewa dokumentów spod którego skrypt jest wykonywany - jest to ustawienie z pliku konfiguracyjnego serwera. Technologie internetowe II
Zmienne ustawiane przez serwer WWW • HTTP_ACCEPT - Nagłówek z aktualnego zapytania, jeśli taki istnieje. • HTTP_ACCEPT_CHARSET - Zawartość nagłówka "Accept-Charset" z aktualnego zapytania, jeśli taki istnieje, np. 'iso-8859-1,*,utf-8'. • HTTP_ENCODING - Zawartość nagłówka "Accept-Encoding" z aktualnego zapytania, jeśli taki istnieje, np. 'gzip'. • HTTP_ACCEPT_LANGUAGE - Zawartość nagłówka "Accept-Language" z aktualnego zapytania, jeśli taki istnieje, np. 'en'. • HTTP_CONNECTION - Zawartość nagłówka "Connection" z aktualnego zapytania, jeśli taki istnieje, np. 'Keep-Alive'. • HTTP_HOST - Zawartość nagłówka "Host" z aktualnego zapytania, jeśli taki istnieje. • HTTP_REFERER - Adres strony (jeśli taka była), która wskazała przeglądarkę do tej strony. Wartość ta jest ustawiana przez przeglądarkę - nie wszystkie to robią. Technologie internetowe II
Zmienne ustawiane przez serwer WWW • HTTP_USER_AGENT - Zawartość nagłówka "User-Agent" z zapytania, jeśli taki istnieje. Jest to ciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można użyć funkcji get_browser() aby dopasować funkcjonalność strony do przeglądarki użytkownika. • REMOTE_ADDR - Adres IP z którego użytkownik ogląda bieżącą stronę. • REMOTE_PORT - Port używany do komunikacji pomiędzy użytkownikiem a serwerem. • SCRIPT_FILENAME - Ścieżka do aktualnie wykonywanego skryptu. • SERVER_ADMIN - Wartość podana dla opcji SERVER_ADMIN w konfiguracji serwera WWW. Jeśli skrypt działa na wirtualnym serwerze, to będzie to wartość podana dla tego wirtualnego serwera. • SERVER_PORT - Port na serwerze którego użyto do połączenia. Dla normalnych połączeń będzie to '80'. • SERVER_SIGNATURE - Ciąg zawierający wersję i nazwę wirtualnego hosta który jest dodawany do stron generowanych przez serwer. • SCRIPT_NAME - Zawiera ścieżkę do aktualnie wykonywanego pliku. Jest to przydatne do skyptów, które muszą wskazywać samego siebie. • REQUEST_URI - URI który został podany aby uzyskać dostęp do tej strony. Technologie internetowe II
Zmienne ustawiane przez PHP • argv - Tablica argumentów przekazywanych do skryptu. Jeśli skrypt jest uruchamiany z linii poleceń, to zmienna ta daję dostęp do argumentów w stylu języka C. Jeśli jest wywołany przez metodę GET, to zmienna ta zawierać będzie ciąg parametrów (query string). • argc - Zawiera liczbę parametrów podanych podanych do skryptu w linii poleceń (jeśli skrypt został wywołany z linii poleceń). • PHP_SELF - Nazwa pliku aktualnie wykonywanego skryptu, względna do katalogu głównego dokumentów. Ta zmienna jest niedostępna jeśli PHP jest uruchamiany z linii poleceń. • HTTP_COOKIE_VARS - Tablica asocjacjna zmiennych przekazanych do skryptu przez HTTP cookies. Dostępna tylko jeśli włączone zostało śledzenie zmiennych przez ustawienie w konfiguracji PHP opcji track_vars lub komendą <?php_track_vars?>. • HTTP_GET_VARS - Tablica asocjacjna zmiennych przekazanych do skryptu przez metodę GET. Dostępna tylko jeśli włączone zostało śledzenie zmiennych przez ustawienie w konfiguracji PHP opcji track_vars lub komendą <?php_track_vars?>. • HTTP_POST_VARS - Tablica asocjacjna zmiennych przekazanych do skryptu przez metodę POST. Dostępna tylko jeśli włączone zostało śledzenie zmiennych przez ustawienie w konfiguracji PHP opcji track_vars lub komendą <?php_track_vars?>. Technologie internetowe II
Stałe ustawiane przez parser • __FILE__ - Nazwa pliku ze skryptem który jest aktualnie przetwarzany. Jeśli stała ta użyta jest wewnątrz pliku który został zainkludowany (o poleceniu include w dalszej części kursu), to podana zostanie nazwa pliku zainkludowanego, a nie pliku nadrzędnego. • __LINE__ - Numer linii w skrypcie która aktualnie jest przetwarzana. Jeśli stała ta użyta jest wewnątrz pliku który został zainkludowany, to podany zostanie numer linii przetwarzanej w pliku zainkludowanym. • PHP_VERSION - Ciąg reprezentujący wersję parsera PHP aktualnie używaną. • PHP_OS - Nazwa systemu operacyjnego na którym uruchamiany jest parser PHP. • TRUE - Logiczna wartość prawdy. • FALSE - Logiczna wartość fałszu Technologie internetowe II
Stałe definiowane przez użytkownika <?php define("ROK", "2006"); echo "Mamy rok ".ROK; ?> Technologie internetowe II
Operatory • Operatory - symbole, które służą do operacji na zmiennych. • Operatory dzielą się na: • operatory arytmetyczne, • operatory przypisania, • operatory operacji bitowych, • operatory porównania, • operator kontroli błędów, • operator wywołania (uruchamianie zewnętrznych programów), • operatory inkrementacji i dekrementacji, • operatory logiczne • operatory ciągu. Technologie internetowe II
Operator przypisania, operator konkatenacji • Podstawowym operatorem przypisania jest symbol '='. • Zmiennej można przypisać także wartość innej zmiennej: $b = 5; $a = $b. • Zmiennym można przypisywać wartości innych zmiennych. • Wartości te można przypisywać kaskadowo, przy czym wartości przypisywane będą od prawej do lewej • Operator konkatenacji . np. „Ala”.”kot” -> Alakot Technologie internetowe II
Operatory arytmetyczne Operator konkatenacji . np. „Ala”.”kot” -> Alakot Technologie internetowe II
Operator przypisania Technologie internetowe II
Operatory operacji bitowych Technologie internetowe II
Operatory porównania Technologie internetowe II
Operator kontroli błędów • Operator kontroli błędów ('@') powoduje, że wyrażenie przed którym postawiono ten znak nie spowoduje wyświetlenia się jakiegokolwiek błędu lub ostrzeżenia. <? /* Jeden z najczęstszych błędów SQL (za dużo o jeden apostrof) */ $res = @mysql_query ("select nazwa, kod from 'lista") or die ("Zapytanie się nie powiodło: błąd to ''"); ?> Technologie internetowe II
Operator wywołania • Operator ten służy do uruchamiania zewnętrznych programów lub poleceń powłoki. • Wystarczy wpisać polecenie pomiędzy znaki odwróconego apostrofu ('`') aby zostało ono wykonane <? $wynik = `ls -l /home/`; echo $wynik; ?> • Po uruchomieniu tego skryptu wyświetlona zostanie zawartość katalogu /home na serwerze Technologie internetowe II
Operatory inkrementacji i dekrementacji Technologie internetowe II
Operatory inkrementacji i dekrementacji <? echo "<h3>Postinkrementacja"; $a = 5; echo "Powinno być 5: " . $a++ . "<br>\n"; echo "Powinno być 6: " . $a . "<br>\n"; echo "<h3>Preinkrementacja"; $a = 5; echo "Powinno być 6: " . ++$a . "<br>\n"; echo "Powinno być 6: " . $a . "<br>\n"; echo "<h3>Postdekrementacja"; $a = 5; echo "Powinno być 5: " . $a-- . "<br>\n"; echo "Powinno być 4: " . $a . "<br>\n"; echo "<h3>Predekrementacja;"; $a = 5; echo "Powinno być 4: " . --$a . "<br>\n"; echo "Powinno być 4: " . $a . "<br>;\n"; ?> Technologie internetowe II
Operatory logiczne Technologie internetowe II
Struktury kontrolne • Instrukcje warunkowe • Instrukcje pętli: • For • While • Do … while • Break • Instrukcja switch Technologie internetowe II
Instrukcje warunkowe <? if(wyrażenie_warunkowe) instrukcja wykonywana jeśli spełniony zostanie warunek else if(inne_wyrażenie_warunkowe) instrukcja wykonywana jeśli spełniony zostanie drugi warunek, a pierwszy nie else instrukcja wykonywana jeśli nie zostanie spełniony żaden z warunków ?> • wyrażeniem warunkowym jest dowolne wyrażenie • za warunek uznawane jest wszystko co zwraca wartość, czyli wszystkie zmienne, wyrażenia logiczne, funkcje itp. • spełniony warunek - wartość większa od zera Technologie internetowe II
Instrukcje warunkowe <?php $nastroj = "smutny"; if ($nastroj == "radosny") { echo "Hurrra, jestem w dobrym nastroju!";} else { echo "Mój nastrój jest $nastroj.";} ?> • Jeśli chcemy, aby po sprawdzeniu warunku wykonane zostało nie jedno, ale kilka poleceń, to te polecenia trzeba ująć w nawiasy klamrowe Technologie internetowe II
Instrukcje warunkowe <?php $nastroj = "smutny"; if ($nastroj == "radosny") { echo "Hurrra, jestem w dobrym nastroju!";} else if ($nastroj == "smutny") { echo "Nie martw się, wszystko będzie dobrze!";} else { echo "Ani wesoły, ani smutny, ale $nastroj.";} ?> Technologie internetowe II
Instrukcje warunkowe <? $a = 6; $b = 5; $c = 7; $d = 6; $e = 6; if( ($a > $b || $a > $c) && // Nawiasy klamrowe nie są potrzebne - to $d == $e ) // 2 linie ale jedna instrukcja echo 'Zmienna $a jest większa od $b a zmienna $d jest równa $e, '. 'więc ten tekst pokaże się.'; // Taka konstrukcja jest dozwolona ?> Technologie internetowe II
Pętla for <? for( inicjalizacja zmiennych ; sprawdzenie warunku ; modyfikacja zmiennych) { blok wyrażeń } ?> Technologie internetowe II
Pętla for – przykład 1 <?php for ($licznik=1; $licznik<=12; $licznik++) { echo "$licznik razy 2 to ".($licznik * 2)."<br>";} ?> Technologie internetowe II
Pętla for – przykład 2 <?php for ($licznik=1; $licznik<=10; $licznik++) { $tymcz = 4000/$licznik; echo "4000 dzielone przez $licznik to... $tymcz<br>"; } ?> Technologie internetowe II