PHP 3 PHP 3 narzędzie do komunikacji z bazami danych z poziomu stron WWW oraz do tworzenia dynamicznych stron WWW autor: Rafał Majewski źródło: czasopismo Linux+, książka „PHP3” autorstwa Leona Atkinsona 1/25 PHP 3 PHP 3 – co to jest i do czego służy ? PHP 3 jest to technologia skryptowa działająca po stronie serwera (jest projektem Open Source). Służy ona do komunikowania się z bazami danych a następnie do zwracania rezultatów tej komunikacji w postaci dokumentów HTML. Jest to silne narzędzie w rękach programisty – obsługuje bezpośrednio wiele baz, np.: - PostgreSQL - Adabas D - Oracle - Sybase - wszystkie bazy obsługujące sterownik ODBC 2/25 PHP 3 Historia PHP 3 Autorem PHP jest Rasmus Lerdorf, który stworzył i zaczął rozwijać tą technologię na początku 1995 roku. Na początku istnienia PHP zawierało w sobie prymitywny parser, który potrafił zrozumieć kilka makr (można w tym było stworzyć między innymi licznik, książkę gości). Następnie dodana została obsługa bazy danych mSQL i tak powstała pierwsza wersja PHP nazwana PHP/FI 2. Technologia ta od razu zaczęła cieszyć się dużym zainteresowaniem na całym świecie i dzięki udostępnionym kodom źródłowym została szybko rozwinięta o kolejne funkcje. Duży wkład w stworzenie PHP 3 mają Zeev Suraski oraz Andi Gutman. PHP 3 jest wynikiem połączenia PHP/FI 2 z nowymi funkcjami. Standardowo PHP 3 zawiera bezpośrednią obsługę protokołu IMAP, można w nim tworzyć grafikę (wtedy skrypt PHP zwraca obrazek w formacie GIF), generować cookies oraz tworzyć na tyle zaawansowane programy jak klient news’owy lub klient pocztowy korzystający z IMAP’a. Pełna wersja PHP 3 została udostępniona 6 czerwca 1998 roku. 3/25 PHP 3 PHP 3 – dlaczego jest lepsze od rozwiązań konkurencyjnych? - podstawowym argumentem jest to, że PHP 3 jest darmowe. - PHP pozwala na szybsze tworzenie kodu i szybciej go wykonuje – w stosunku do takich rozwiązań jak Active Server Pages lub CGI - ten sam kod PHP, bez żadnych modyfikacji może działać na wielu serwerach WWW ( m.in. Apache, Internet Information Server) oraz na wielu systemach operacyjnych ( Unix, Windows 98, Windows NT oraz Macintosh’owych OS’ach). - możliwości funkcjonalne, będące standardem PHP, w innych środowiskach są dodatkami. - system śledzenia błędów, dostępny na witrynie PHP, pokazuje wszelkie problemy i sposoby ich rozwiązywania. - pomoc związana z wykorzystaniem PHP jest bezpłatna i łatwo dostępna. Odpowiedzi na pytania, przesyłane na listy dyskusyjne poświęcone PHP, nadsyłane są w krótkim czasie. 4/25 PHP 3 Współpraca PHP 3 z serwerem WWW Proces komunikacji rozpoczyna się w chwili zgłoszenia przez przeglądarkę żądania dostarczenia strony WWW. Przeglądarka określa adres serwera WWW na podstawie adresu URL oraz identyfikuje stronę, którą chce otrzymać. Standardowo serwer WWW bez żadnych dodatkowych operacji wysyła do przeglądarki gotowy dokument w formacie HTML. W przypadku zgłoszenia żądania dostępu do strony PHP, zostaje ono przetworzone dokładnie tak jak żądanie CGI – po stronie serwera zostaną wykonane operacje zdefiniowane w skrypcie PHP, a następnie ich wynik przekazany do przeglądarki w formacie HTML. 5/25 PHP 3 Tworzenie stron WWW Standardowo strona napisana w PHP 3 powinna mieć rozszerzenia *.php3 lub *.phtml. Jest to konieczne do prawidłowej interpretacji ich przez serwer WWW. Istnieje możliwość ustawienia w konfiguracji serwera WWW ( na przykładzie serwera WWW Apache) dowolnego rozszerzenia i przypisania go do skryptów PHP 3. 6/25 PHP 3 Szkielet bazy danych (PostgreSQL) początek skryptu CREATE TABLE tbl_host_info ( host_id int , host_urltext not null , host_opis text , PRIMARY KEY (host_id) ); - stworzenie licznika CREATE SEQUENCE seq_host_id start 1; - nadanie praw dla użytkownika nobody do czytania tabeli GRANT select on tbl_host_info to nobody - wprowadzenie kilku danych testowych INSERT into tbl_host_info (host_id, host_url, host_opis) VALUES ( nextval(<<seq_host_id>>), <<test.com.pl>>, <<Super host>>); INSERT into tbl_host_info (host_id, host_url, host_opis) VALUES ( nextval(<<seq_host_id>>), <<www.linux.com.pl>>, <<Strona pisma Linux+>>); - koniec skryptu 7/25 PHP 3 Przykładowa strona w PHP 3 <html> <head> <title> Strona testowa </title> <body bgcolor=white> <? // definicje zmiennych $host = localhost; $port = 5432; // port na którym znajdziemy bazę $base_name = wwwindex; // nazwa naszej bazy // funkcja mająca za zadanie nawiązanie komunikacji z bazą danych i przekazanie // informacji o sukcesie lub porażce function connect ($host, $port, $base_name) { $conn = pg_connect ( $host, $port, „”, „”, $base_name); if (!conn) { Print(„Połączenie nie powiodło się”); } else { print („<h1>!SUKCES!</h1>”); return conn; } } 8/25 PHP 3 Przykładowa strona w PHP 3 c.d. //funkcja zwracająca kolejne wartości z pól tabeli function show_result ($conn) { // zdefiniowanie zapytania SQL $sql = „SELECT * FROM tbl_host_info”; // wykonanie zapytania $result = pg_exec ($conn, $sql); // zliczenie ilości wierszy tabeli $rows = pg_numrows ($result); // $i - zmienna pomocnicza dla licznika $i = 0; while ($i<$rows) { echo „<br>To jest host_id:<font color=green>”; echo pg_result ($result, $$i, „host_id”); jest host_url:<font color=blue>”; „host_url”); color=red>”; „host_opis”); echo”</font><br>To echo pg_result ($result, $i, echo”</font><br>To jest host_opis:<font echo pg_result ($result, $i, echo „</font><br><hr>”; $i++; } } 9/25 PHP 3 Przykładowa strona w PHP 3 c.d. // wywołanie funkcji connect $conn connect($host, $port, $base_name); // wywołanie funkcji show_result show_result($conn); ?> </body> </html> 10/25 PHP 3 Wynik otrzymany w przeglądarce 11/25 PHP 3 Dołączanie plików nagłówkowych (bibliotek) W PHP 3 dołączanie dodatkowych plików można zrealizować na dwa sposoby. Jednym z tych sposobów jest dyrektywa include(„plik”). Dyrektywa ta dołącza plik zdefiniowany jako argument, w miejscu gdzie została umieszczona. Przykładowo, możemy w jednym pliku zdefiniować nagłówek strony, w innym stopkę, i dołączyć je do skryptu, aby uzyskać pożądany efekt. Przykładowe pliki: head.inc <? echo „<html> <head> <title> To jest nagłówek </title> </head> ?> foot.inc <? echo „</body> </html>”; ?> test.php3 <? include („head.inc”) echo „To jest strona testowa” include („foot.inc”); ?> Jedną z zalet include jest to, że często powtarzające się części kodu można zapisywać w oddzielnych plikach, co może znacznie usprawnić pisanie programów. 12/25 PHP 3 Dołączanie plików nagłówkowych (bibliotek) c.d. Drugim ze sposobów korzystania z zewnętrznych plików z poziomu skryptów PHP jest dyrektywa require(). Jest ona bardzo podobna do dyrektywy #include z języka C. Używa się jej tak samo jak w języku C, więc w przeciwieństwie do include() trzeba jej używać na początku skryptu. Używanie tej dyrektywy pozwala na tworzenie plików-bibliotek, zawierających wszystkie funkcje używane w skrypcie. Dzięki takim zabiegom można uzyskać większą przejrzystość pisanych skryptów. 13/25 PHP 3 Identyfikatory , Typy danych i zmienne Identyfikatory nadają nazwy abstrakcyjnym elementom PHP – funkcjom, zmiennym i klasom. Niektóre z nich są tworzone przez PHP jako funkcje wbudowane lub zmienne środowiskowe. Inne są tworzone są przez użytkownika. Identyfikatory mogą mieć dowolną długość i mogą składać się z dowolnej kombinacji liter, cyfr i znaków podkreślenia. Pierwszym znakiem identyfikatora musi być litera lub znak podkreślenia. Duże i małe litery są rozróżnialne i traktowane jako odmienne. Wyjątkiem od tej reguły są funkcje wbudowane. Nie ma znaczenia czy funkcja wbudowana zostanie napisana dużymi, czy małymi Literami, np. „print” czy „Print”. Zmienne określane są poprzedzeniem ich przez znak $. W konsekwencji tej składni można nadawać zmiennym takie nazwy jak funkcjom, a nawet takie jak funkcjom wbudowanym, co może wprowadzać zamieszanie przy analizowaniu kodu. PHP dysponuje trzema typami danych: liczbami całkowitymi, liczbami zmiennoprzecinkowymi oraz łańcuchami znaków. Podczas deklarowania zmiennych nie określa się konkretnie ich typu. PHP automatycznie rozpoznaje typ danej i przypisuje je do siebie. Istnieje możliwość zmienienia domyślnego przypisania typu zmiennej. Odbywa się to przez Zastosowanie funkcji settype z odpowiednimi parametrami ( intval, doubleval, strval ). Miejsce, w którym zmienna została po raz pierwszy użyta określa zakres, w którym będzie ona widoczna. Każda zdefiniowana funkcja posiada własny zakres widzialności zmiennych. 14/25 PHP 3 Identyfikatory , Typy danych i zmienne c.d Oznacza to, że są zmienne istniejące wyłącznie wewnątrz funkcji, które nie są widoczne w innej części skryptu. Dodatkowo istnieje także globalny zakres widzialności, przeznaczony dla zmiennych stworzonych poza funkcjami. W PHP zmienne globalne nie są automatycznie dostępne wewnątrz funkcji. W PHP, tworząc funkcję należy jawnie określić, czy zmienna globalna ma być w niej dostępna. <HTML> <HEAD> <BODY> <? function printCity ($NameOfCity) { Print („Nazwa miasta: $NameOfCity.<br>\n”); } function California() { $capital = „Sacramento”; printCity ($capital); } function Utah() { 15/25 PHP 3 Identyfikatory i Typy danych i zmienne c.d $capital = „Salt Lake City”; printCity ($capital); } function Nation () { global $capital; printCity($capital); } $capital = „Washington D.C.”; California(); Utah(); Nation(); ?> </BODY> </HTML> Wynikiem po wykonaniu tego skryptu będzie wyświetlenie po kolei: Nazwa miasta: Sacramento << wartość pobrana ze zmiennej lokalnej Nazwa miasta: Salt Lake City << wartość pobrana ze zmiennej lokalnej Nazwa miasta: Washington D.C. << wartość pobrana ze zmiennej globalnej 16/25 PHP 3 Klasy i obiekty w PHP 3 Stworzenie klasy w PHP 3 odbywa się poprzez zadeklarowanie jej nazwy, atrybutów (zmiennych) i metod. Przy deklaracji atrybutu wstawiane jest słowo kluczowe var przed atrybutem. Przy deklaracji metody używane jest słowo kluczowe function. Definicja klasy służącej do gromadzenia informacji o użytkownikach: <? class user { var $name; var $password; var $last_login; function init ($inputName, $inputPassword) { $this->name = $inputName; $this->password = $inputPassword; $this->last_login = time(); } fuction getLastLogin() { return (Date („d M Y”, $this->last_login)); } } // metoda init wykorzystuje zmienną this // do przypisania wartości trzem atrybutom obiektu 17/25 PHP 3 Klasy i obiekty w PHP 3 c.d. // stworzenie obiektu i jego zainicjalizowanie $curentUser = new user; $currentUser -> init („Leon”, „xxx”); // wyświetlenie daty ostatniego logowania print ($currentUser -> getLastLogin()); print („<br>\n); // wyświetlenie nazwy użytkownika print ($currentUser -> name); print („<br>\n); ?> </BODY> </HTML> Po zdefiniowaniu klasy do stworzenia nowego egzemplarza obiektu używa się polecenia new. Po stworzeniu obiektu zostaje zarezerwowana pamięć dla wszystkich jego atrybutów. Każdy egzemplarz obiektu ma swój zbiór atrybutów. Metody są wspólnie używane przez wszystkie egzemplarze obiektów danej klasy. Metodom można nadawać wszelkie nazwy, jeśli jednak nazwa metody będzie identyczna z nazwą klasy, to metoda ta będzie traktowana jako konstruktor i zostanie wykonana od razu po stworzeniu egzemplarza obiektu. PHP 3 nie udostępnia destruktorów. 18/25 PHP 3 Klasy i obiekty w PHP 3 c.d. W odróżnieniu od innych obiektowych języków programowania, takich jak C++, atrybuty w PHP 3 nie są prywatne. Dowolny kod ma dostęp do egzemplarzy obiektów i może odczytywać oraz Modyfikować wartości atrybutów. Dostęp do metod jest bardzo podobny jak dostęp do atrybutów. Do wskazania metody egzemplarz obiektu wykorzystywany jest operator -> Metody zachowują się tak samo jak funkcje zdefiniowane poza klasami. Metody dysponują wewnątrz klasy zmienną this, która jest tworzona automatycznie. Zmienna ta jest odwołaniem do egzemplarza obiektu i pozwala metodom na korzystanie z jego atrybutów. Wykorzystując to, że egzemplarze obiektów są zmiennymi, można je umieszczać w tablicach. Niestety w PHP w wersji 3 nie jest jeszcze możliwe odwoływanie się do metod i atrybutów bezpośrednio przy użyciu tablicy. Możliwość taka istnieje dopiero w 4 beta wersji tej technologii. W wersji 3 jedynym rozwiązaniem tego problemu jest zapisanie obiektu z tablicy do zmiennej, np.: $zmienna = $jakaśTablica[22]; $zmienna -> jakaśMetoda(); 19/25 PHP 3 Funkcje wejścia-wyjścia Przekazywanie danych do przeglądarki: Dostępne są tutaj trzy funkcje (echo – pochodząca z PHP w wersji 2, print oraz printf udostępniająca możliwość formatowania (określenia ich formatu) wysyłanych danych). Wszystkie te funkcje pobierają Wartości i przesyłają je do przeglądarki. Pobieranie danych z formularzy: PHP3 korzysta z kilku udostępnionych przez HTML metod pobierania informacji od użytkowników Za pośrednictwem formularzy. Dostępne są tutaj listy wyboru, pola tekstowe, checkboxy i inne. W momencie przesłania formularza każdy z wymienionych elementów staje się łańcuchem znaków przekazywanym do serwera WWW. PHP pobiera wszystkie pola formularza i przekształca je w zmienne. Są one traktowane jak wszystkie inne zmienne, istnieje możliwość modyfikacji ich wartości. Zapisywanie plików na serwerze: W celu umożliwienia zapisu danych na serwerze, formularz z którego wysyłane są dane musi korzystać z metody POST, dodatkowo w znaczniku FORM musi być umieszczony atrybut ENCTYPE i musi mieć przypisaną wartość multipart/form-data. Przed znacznikiem INPUT powinno być także pole ukryte, nazwane MAX_FILE_SIZE. Jego wartość określa maksymalną dopuszczalną wielkość pliku, określoną w bajtach. Po odebraniu formularza zostanie on zapisany jako plik w tymczasowym katalogu np./var/tmp 20/25 PHP 3 Funkcje wejścia-wyjścia c.d. Zmienne środowiskowe: PHP udostępnia zmienne środowiskowe. Są one tworzone podczas uruchamiania nowego procesora poleceń systemu operacyjnego. Niektóre z nich to standardowe zmienne takie jak PATH. Reszta zmiennych definiowana jest przez CGI, są to np. REMOTE_ADDR lub HTTP_USER_AGENT. Jedną ze zmiennych środowiskowych tworzonych przez PHP jest GLOBALS – jest to asocjacyjna tablica wszystkich zmiennych globalnych dostępnych w skrypcie. Cookies: Cookies są krótkimi łańcuchami znaków, zawierającymi dane tworzone przez serwer WWW, są jednak przechowywane w przeglądarce. Posiadają one, oprócz nazwy i wartości, datę wygaśnięcia ważności. Większość Cookies jest tworzonych na kilka minut, niektóre jednak mogą istnieć miesiącami. Pozwalają one na rozpoznawanie użytkownika bez konieczności podawania hasła. Cookie przesłane przez przeglądarkę na serwer jest konwertowane do postaci zmiennej. Dodatkowo Cookies są przechowywane w tablicy HTTP_COOKIES_VARS. Ze względu na to, że zarówno Cookies jak i pola formularzy są zamieniane na zmienne, istnieje komenda określająca w jakiej kolejności dokonywana jest zamiana – jest ona zawarta w pliku Konfiguracyjnym php.ini 21/25 PHP 3 Funkcje wejścia-wyjścia c.d. Zapis i odczyt plików: Na komunikację z plikami składają się trzy fazy: - otwarcie strumienia do pliku - odczytanie pliku lub zapisanie w nim jakiś informacji - zamknięcia strumienia Przy otwarciu strumienia otrzymywana jest liczba całkowita, pozwalająca na odwołanie się do otwartego strumienia. Identyfikator ten jest wykorzystywany za każdym razem, gdy plik jest czytany lub zapisywany. Do otwarcia pliku z lokalnego systemu plików używana jest funkcja fopen, przyjmująca jako jeden z parametrów atrybut zapisu w lub odczytu r. Istnieje także możliwość podania adresu internetowego – wymaga to umieszczenia przed nazwą pliku łańcucha znaków http:// lub ftp:// oraz pełnej ścieżki dostępu do pliku, zawierającą także nazwę hosta. 22/25 PHP 3 Funkcje graficzne Analiza obrazów: W skład tej kategorii wchodzi tylko jedna funkcja getimagesize(string nazwa_pliku) Funkcja ta zwraca czteroelementową tablicę określającą wielkość obrazu zapisanego w pliku o podanej nazwie. Przykładowa zawartość tablicy: 0 Szerokość wyrażona w pikselach 1 Wysokość wyrażona w pikselach 2 Typ obrazka (GIF=1,JPG=2,PNG=3) 3 Łańcuch znaków o postaci „height=### width=###”, który można wykorzystać w znaczniku IMG przykład: <? $image_file = „plik1.gif”; $image_size = getimagesize ($image_file); print („<IMG SRC= \”$image_file\” $image_size[3]>\n”); ?> 23/25 PHP 3 Funkcje graficzne c.d. Tworzenie obrazów GIF: Do rozpoczęcia pracy z obrazem należy użyć funkcji imagecreate w przypadku, gdy chcemy pracować na pustym obrazie lub z funkcji imagefromgif, która pozwala na załadowania obrazka GIF o podanej nazwie. W skład możliwości tworzenia grafiki w PHP wchodzi wiele funkcji matematyczno-geometrycznych, zawierających szereg operacji na palecie kolorów. 24/25 PHP 3 Podsumowanie PHP 3 można uznać za w pełni funkcjonalne narzędzie, służące do tworzenia dynamicznych stron WWW oraz do zaawansowanej komunikacji z szeroką gamą baz danych z poziomu stron WWW poprzez Internet. Pomimo kilku niedociągnięć stało się bardzo popularną technologią. Stało się tak niewątpliwie dlatego, że składnia w której można programować łączy w sobie najlepsze idee języków Java, Perl oraz C – czyli języków programowania powszechnie uznanych i używanych. Kolejnymi argumentami, które powiększają duże już rzesze użytkowników ( ok. 200.000 witryn i serwisów działało w tym środowisku pod koniec 1999 roku) tego skryptowego środowiska są: - jest ono darmowe - kody źródłowe tego produktu są ogólnie dostępne ( istnieje więc możliwość indywidualnego rozwijania tego środowiska) - istnieje bardzo mocne wsparcie w postaci list dyskusyjnych i domowej strony PHP3 zawierającej opisy wszystkich znanych problemów i ich rozwiązań. 25/25