13.07.2015 Views

PHP i bazy danych

PHP i bazy danych

PHP i bazy danych

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

WprowadzeniePołączenie <strong>PHP</strong> i baz <strong>danych</strong>:• Korzyści:– Różna zawartość tej samej strony– Udostępnianie <strong>danych</strong> na zewnątrz– Zdalna modyfikacja <strong>danych</strong>• Trudności:– Serwery proxy, itp.– Tworzenie sesji użytkownika– Czas trwania operacji (ustalić timeout)


Buforowanie stronPoziomy buforowania:– Serwer proxy– Cache przeglądarkiRozwiązanie:– Uzupełnienie zwracanej strony o informacjedotyczące czasu jej ważności


Buforowanie stron (2)Przykład metody GET:GET /test.php?user=ala&pass=kotek HTTP/1.1Host: przyklad.serwer.com…Przykład metody POST:POST /test.php HTTP/1.1Host: przyklad.serwer.com…user=ala&pass=kotek


Buforowanie stron (3)Przykład odpowiedzi serwera:HTTP/1.0 200 OKDate: Sat, 20-May-95 03:25:12 GMT…Content-type: text/htmlLast-modified: Wed, 14-Mar-95 18:15:23 GMT…To jest testtest


Buforowanie stron (4)Modyfikacja nagłówka:


Buforowanie stron (5)Uwagi:– Funkcji header należy użyć przed wysłaniemjakiegokolwiek znaku do przeglądarki– Można wykorzystać inkludowanie plików


Przekierowywanie


Uwierzytelnianie• Wysłanie żądania uwierzytelnienia:header(‘WWW-Authenticate: BASIC’.’ realm=”Test”’);header("HTTP/1.0 401 Unauthorized");• Pobranie wyników:– $_SERVER['<strong>PHP</strong>_AUTH_USER']– $_SERVER['<strong>PHP</strong>_AUTH_PW']


Uwierzytelnianie (2)• Uwagi:– Nie obsługiwane przez niektóre przeglądarki– Dane nie są szyfrowane– IIS – problemy z podmianą nagłówkaheader('Status: 401 Unauthorized');


Cel:Sesje– Zachowanie ciągłości w komunikacji z użytkownikiemTrudności:– HTTP – protokół bezpołączeniowy– Adres IP i port komputera użytkownika – za małoRozwiązanie:– Przekazywanie ID sesji przez• mechanizm cookies• adres URL– Nie zaleca się przechowywania zmiennychsesyjnych na lokalnym komputerze


Sesje (2)Przekazywanie ID sesji – problemy:– cookies• można wyłączyć– adres URL• widoczne ID sesji• należy samemu pilnować odnośniki(php.ini: session.use_trans_sid=0)Sesje są automatycznie obsługiwane od <strong>PHP</strong> 4.0


Sesje (3)Funkcje do obsługi sesji:• Inicjalizacja (na każdej stronie, albo ustawionyparametr php.ini: session.auto_start=1)session_start();• Zamknięcie sesji (logout)session_destroy();


Sesje (4)Zmienne sesyjne (session.bug_compat_42=on):• Rejestracja zmiennych sesyjnych (jednorazowo)session_register(”nazwa1”, …);• Używanie zmiennych sesyjnych$nazwa1=”ala ma kotka”;$zdanie=”Zdanie: ”.$nazwa1;if(isset($nazwa1))...• Usuwanie zmiennych sesyjnychsession_unregister(”nazwa1”, …);


Sesje (5)Zmienne sesyjne (session.bug_compat_42=off):• Rejestracja i używanie zmiennych sesyjnychif (!isset($_SESSION['count']))else$_SESSION['count']=0;$_SESSION['count']++;• Usuwanie zmiennych sesyjnychunset($_SESSION['count']);


Sesje (6)Zmiany dla kompatybilności 4.2.0 -> 4.3.0:• Zmienne sesyjne rejestrowane w globalnym obszarzesession.bug_compat_42 = 1• Generowanie ostrzeżeniasession.bug_compat_warn = 1


Sesje (7)Przekazywanie ID sesji przez URL:• Linki”>• Formularze z metodą POST >


Sesje (8)• Uwagi:– Przełącznik kompilacji --enable-trans-sid ustawiony od 4.2.0– // w nowej wersji po session_start()define(“SID“,session_name() . ”=” . session_id());


Sesje (9)Sposób pamiętania sesji:• W odpowiednim pliku (domyślnie)– jeden plik na sesję w katalogu /tmp(php.ini: session.save_path)– zmienne są zachowane przez serialize• Ręcznie– można przechowywać w bazie <strong>danych</strong>, należy wtedystworzyć odpowiednie procedury(session_set_save_handler())


Baza <strong>danych</strong>Dostępny standardowy interfejs:• Łączenie z bazą <strong>danych</strong> (m.in. persistent)• Wykonanie zapytania SQL• Pobranie wyników• Dostęp do dodatkowych informacjiUwagi:• Nazwy funkcji są zależne od typu <strong>bazy</strong> <strong>danych</strong>


Łączenie z bazą <strong>danych</strong>:• PodstawoweBaza <strong>danych</strong> (2)_connect(”server”,”user”,”password”);• Persistent_pconnect(”server”,”user”,”password”);Uwagi:• W wyniku zwraca uchwyt połączenia• Typy: odbc, mysql, pg, …• Dla ODBC musi być dobrze skonfigurowany DSN• Połączenie podstawowe jest automatycznie zamykane


Baza <strong>danych</strong> (3)Wykonanie zapytania:• Ogólnie:– $exe_id=_query($conn_id, ”sql”);• ODBC:– $exe_id=odbc_exec($conn_id, ”sql”);– $stmt=odbc_prepare($conn_id, ”sql”);$exe_id=odbc_execute($stmt);


Pobranie wyników:Baza <strong>danych</strong> (4)• Pojedyncze pole (czasem tabl. asoc.):– _fetch_row($exe_id);_result($exe_id, );• Tablica asocjacyjna+indeksowana:– _fetch_array($exe_id);• Obiekt:– _fetch_object($exe_id);• Zwolnienie pamięci:– _free_result($exe_id);


Baza <strong>danych</strong> (5)Dodatkowe informacje:• ID ostatnio dodanego rekordu:pg_last_oid($exe_id);mysql_insert_id($exe_id);• Liczba zmienionych wierszy:_affected_rows($exe_id);• Liczba wierszy i kolumn do pobrania:_num_rows($exe_id); // -1 - nieznane_num_fields($exe_id);• Błędy:_error($conn_id);


Baza <strong>danych</strong> (6)• $conn_id=odbc_connect("php","","");$exec_id=odbc_exec($conn_id,"SELECT * From Osoba");while(odbc_fetch_row($exec_id)){for($j=1;$j


COMObiekty COM (tylko Microsoft):– Tworzenie:$ob = new COM(”nazwa_obiektu”[, string server_name[, int codepage]] );– Używanie:$ob->…– Zwolnienie:$ob->Release();$ob=null;


COM (2)$baza =new COM("ADODB.Connection");$plik=dirname($_SERVER["SCRIPT_FILENAME"])."\\osoby.mdb";$baza->Open(”Provider=”.”Microsoft.Jet.OLEDB.4.0”.”;Data Source=”.$plik);


COM (3)$wynik = $baza->Execute("SELECT * From Osoba");// lub foreach od <strong>PHP</strong> 5.0while(! $wynik->eof){for($j=0;$jfields->count;$j++){echo $wynik->fields[$j]->value;}$wynik->MoveNext();}// usunięcie obiektów…


COM (4)com_load_typelib('Outlook.Application');// after that the code from Purplerain$objApp = new COM("Outlook.Application");$myItem = $objApp->CreateItem(olMailItem);$a=$myItem->Recipients->Add("adres");$myItem->Subject="Temat";$myItem->Body="Treść listu!";$myItem->Display();$myItem->Send();


Win32 API// Load the extension indl("php_w32api.dll");// Register the GetTickCount function fromkernel32.dllw32api_register_function("kernel32.dll","GetTickCount","long");// Register the MessageBoxA function from User32.dllw32api_register_function("User32.dll","MessageBoxA","long");


Dokument XML:XML– format tekstowy (czytelny)– dane zamknięte w znaczniki– znaczniki parami zamykane– jeden korzeń– w obrębie znacznika unikalne parametry– wartości parametrów w cudzysłowiu


XML (2)Dokument XML – przykład: t1 t2 t3


XML (3)Dokument XML – przykład 2:


XML (3)Dokument XML – dostęp:– DOM (Document Object Model)• drzewo przechowywane w pamięci• skomplikowany interfejs– SAX (Simple API for XML)• wywoływanie zdarzeń (callback)• readonly


XML (4)Obsługa plików XML:– Utworzenie funkcji (handlerów)startElement($parser, $name, $attrs);endElement($parser, $name);characterData($parser, $data);


XML (5)Obiekt parsera XML:– Utworzenie obiektu parsera• $xml_parser = xml_parser_create();• xml_set_element_handler($xml_parser,”startElement”, ”endElement”);• xml_set_character_data_handler($xml_parser, ”characterData”);– Usunięcie obiektu parsera• xml_parser_free($xml_parser);


XML (6)Parsowanie:– Wysłanie tekstu do parsera• xml_parse($xml_parser, $data, [end]);– Błędy• xml_get_error_code($xml_parser);• xml_error_string();• xml_get_current_line_number($xml_parser)


Podsumowanie• Linki:– www.php.net – strona projektu <strong>PHP</strong>– conf.php.net – konferencje o <strong>PHP</strong>– www.mysql.com – MySQL– www.postgresql.org – PostgreSQL– msdn.microsoft.com - MSDN Microsoft


Dziękuję za uwagę

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!