Język PHP Studium Podyplomowe Sieci Komputerowe i Aplikacje Internetowe v1.7, 2007/11/23 1 Wprowadzenie Język PHP [1] jest obiektowym językiem skryptowym przeznaczonym do implementacji wstawek programowych na stronach WWW interpretowanych po stronie serwera. Podstawową zaletą skryptów po stronie serwera jest ich efektywność w porównaniu do standardowych skryptów CGI. Interpreter języka PHP jest modułem serwera WWW i cały czas jest dostępny podczas pracy serwera. Dodatkową zaletą jest możliwość wykorzystania standardowych edytorów HTML do tworzenia dynamicznych dokumentów ze względu na konieczność modyfikacji jedynie zmiennych fragmentów dokumentu. 1.1 Przykład Hello World Dokument PHP jest zwykłym dokumentem w języku HTML wzbogaconym o interpretowalne wstawki wyróżnione znacznikami i. Oto przykład najprostszego dokumentu: <head> <title>przykład skryptu PHP</title> </head> <h1>przykład skryptu PHP</h1> <p> echo("php Hello world!"); </p> <p>dzisiejsza data: echo date("d/m/y H:i:s"); </p> 1.2 PHP jako interpreter zewnętrzny PHP może być wykorzystywany do pisania skryptów uruchamianych poza serwerem WWW. Tryb ten pozawala na wykonywanie skryptów w trybie CGI na serwerach nie posiadających wbudowanego interpretera PHP. Oto przykład takiego skryptu: #!/usr/bin/php -q echo "Test skryptu PHP\n"; 1
2 Dostęp do baz danych Język PHP ma wbudowany zestaw funkcji do obsługi wielu różnych baz danych, m.in.: Oracle, PostgreSQL, MySQL, Microsoft SQL, Sybase, dbase i innych. Dostęp do baz danych będzie omówiony na przykładzie bazy PostgreSQL [2]. 2.1 PostgreSQL Dołączenie do bazy danych: # psql [ -h serwer ] -U użytkownik nazwa_bazy Komendy programu psql: \? pomoc \dt wyświetlenie listy tabel \d tabela wyświetlenie opisu tabeli tabela Zapytania: select * from pracownicy; select imie, nazwisko from pracownicy order by nazwisko; 2.2 Zawartość bazy Skrypt list.php: <h1>test połączenia z bazą Postgres</h1> <table border="1"> $db = pg_connect("dbname=webdb user=sp password=xxxxxxxx"); $res = pg_query($db, "select * from pracownicy order by nazwisko"); $num = pg_num_rows($res); for($i=0; $i<$num; $i++) echo "<tr>"; echo "<td>".pg_result($res, $i, "imie")."</td>"; echo "<td>".pg_result($res, $i, "nazwisko")."</td>"; echo "<td>".pg_result($res, $i, "rok_ur")."</td>"; echo "<td>".pg_result($res, $i, "zarobki")."</td>"; echo "</tr>\n"; pg_free_result($res); pg_close($db); </table> 2
2.3 Dodawanie rekordów Skrypt add.php: <h1>dodawanie nowych rekordów</h1> if (isset($_post["imie"])) $db = pg_connect("dbname=webdb user=sp password=xxxxxxxx"); pg_query($db, "begin"); $res = pg_query($db, "insert into pracownicy(imie, nazwisko, rok_ur, zarobki) values( $_POST[IMIE], $_POST[NAZWISKO], $_POST[ROK_UR], $_POST[ZAROBKI])"); if (!$res) echo "Błąd aktualizacji bazy!"; else echo "OK"; pg_query($db, "commit"); pg_close($db); echo "<hr>\n"; echo "\n\n"; exit; <form method="post" action="add.php"> <table> <tr><td>imię:</td> <td><input type="text" name="imie"></td></tr> <tr><td>nazwisko:</td> <td><input type="text" name="nazwisko"></td></tr> <tr><td>rok urodzenia:</td> <td><input type="text" name="rok_ur"></td></tr> <tr><td>zarobki:</td> <td><input type="text" name="zarobki"></td></tr> <tr><td colspan="2" align="center"> <input type="submit" value="wprowadź"> <input type="reset" value="wyczyść"></td></tr> </table> </form> 3 Inne możliwości PHP 3.1 Zarządzanie sesją Skrypt session.php: session_start(); 3
if (isset($_session[ count ])) $_SESSION[ count ]++; else $_SESSION[ count ] = 1; <h1>obsługa sesji</h1> <p>to jest Twoja echo $_SESSION[ count ]; wizyta.</p> <p>odwołaj się <a href="session.php">jeszcze raz</a>.</p> 3.2 Ciasteczka Skrypt cookie.php: if (isset($_cookie["ciacho"])) $ciacho = $_COOKIE["ciacho"]; else setcookie("ciacho", time() % 100, time()+5); $ciacho = "puste"; <h1>ciasteczka</h1> <p>ciasteczko ma wartość: echo $ciacho; </p> 3.3 Dynamiczne tworzenie rysunków Skrypt image.php: header("content-type: image/png"); $im = imagecreatefrompng("in.png"); $cl = imagecolorallocate($im, 0, 80, 0); imagettftext($im, 40, 0, 80, 100, $cl, "/usr/x11r6/lib/x11/fonts/truetype/verdana.ttf", strftime("%h:%m:%s")); imagepng($im); imagedestroy($im); 4
3.4 Uwierzytelnianie Skrypt auth.php: if (!isset($_server[ PHP_AUTH_USER ])) header( WWW-Authenticate: Basic realm="logowanie" ); header( HTTP/1.0 401 Unauthorized ); echo Błąd przy logowaniu ; exit; else echo "<p>witamy użytkownika $_SERVER[ PHP_AUTH_USER ].</p>"; echo "<p>wprowadziłeś \"$_SERVER[ PHP_AUTH_PW ]\" jako swoje hasło.</p>"; 3.5 Poczta elektroniczna Skrypt mail.php: mail("user@x.pl", "Test PHP", "Test z godziny: ".strftime("%h:%m:%s")); <h1>list został wysłany</h1> Istnieje możliwość modyfikacji pól nagłówka listu poprzez dodatkowy argument wywołania funkcji mail(): mail("user1@x.pl", "tytuł", "treść", "From: user2@y.pl"); Literatura [1] PHP. Język skryptowy do zastosowań internetowych. http://www.php.net. [2] PostgreSQL. Relacyjno-obiektowa baza danych. http://www.postgresql.org. 5