====== Laboratorium, PHP # 3 ====== ===== Ćwiczenie 1: Ciastka ===== Przetestuj działanie poniższego kodu: - jaka jest zawartość zmiennej ''$_COOKIE'' przy pierwszym uruchomnieniu, - a jaka przy kolejnych? setcookie('ciastko','smaczne'); var_dump($_COOKIE); ===== Ćwiczenie 2: Ciastka, data przydatności do spożycia ====== Przetestuj działanie poniższego kodu: - uruchom skrypt, - odczekaj ok. 5 sekund, uruchom ponownie, - odczekaj ok. 15 sekund, uruchom ponownie, czy coś się zmieniło? define('CIACHO','mojeciasteczko'); if (!setcookie(CIACHO,'dane',time()+10)) echo 'nie moge wysłać ciastka...'; if (isset($_COOKIE[CIACHO])) echo $_COOKIE[CIACHO]; else echo 'brak danych'; ===== Ćwiczenie 3: Identyfikacja użytkownika (przeglądarki) ===== Napisz pojedynczy skrypt PHP, który: - przy pierwszej wizycie użytkownika poprosi o jego imię, - przy każdej następnej wyświetli imię, - dodaj datę i godzinę ostatniej wizyty, oraz - mechanizm zapominania imienia (np. przy przesłaniu metodą GET atrybutu ''zapomnij'': ''http://..../skrypt.php?zapomnij''). Powyższy mechanizm możesz wykorzystać, aby np. dodać do galerii logowanie użytkownika, tak aby nie trzeba było za każdym razem podawać nazwy użytkownika oraz hasła przy dodawaniu lub usuwaniu obrazków. ===== Ćwiczenie 4: Sesje ====== Powtórz poprzednie ćwiczenie korzystając z mechanizmu sesji. Możesz wykorzystać poniższy kod. session_start(); if (isset($_GET['zapomnij'])){ echo 'Zapominam...'; unset($_SESSION['moje']); } else { if (!empty($_SESSION['moje'])) { echo $_SESSION['moje']; } else { $_SESSION['moje']='jest'; } } ===== Ćwiczenie 5: Wyścig w Galerii ====== Skorzystaj z kodu galeri z poprzednich ćwiczeń, biorąc pod uwagę poniższe wymagania. - Do galerii można dodawać obrazki w formacie JPG, które są przechowywane w wybranym katalogu. - Nazwy obrazków są kolejnymi liczbami naturalnymi zaczynając od 1 tj.: ''1.jpg'', ''2.jpg'' itd., tak aby można było łatwo wyświetlić obrazki w kolejności dodawania. - Zaprogramuj sekcję krytyczną, tak aby nie doszło do nadpisania współbieżnie dodawanych obrazków. Podpowiedź: nazwa dodawanego obrazka = ilość plików w katalogu z obrazkami + 1, np.: $ile=count(glob('*.jpg')); ==== Informacje dodatkowe: Semafory ==== W poniższym kodzie zastąp wartość KLUCZ unikalną w ramach grupy laboratoryjnej liczbą -- możesz użyć identyfikatora użytkownika na serwerze (polecenie ''id'' po zalogowaniu na serwere za pomocą ''ssh''). define('KLUCZ',123456); $sem=sem_get(KLUCZ); if ($sem != FALSE) { echo 'Wejscie do sekcji krytycznej
'; $start=time(); sem_acquire($sem); echo 'Jestem w sekcji krytycznej
'; /* tutaj kod sekcji krytycznej */ sem_release($sem); echo 'Wyjscie z sekcji krytycznej
'; echo 'Czas wykoania: '.(time()-$start).'
'; } else {echo 'Problemy z semaforem...
';}
Działanie w/w kodu możesz przetestować w poniższy sposób: - dodaj odpowiednie znaczniki i umieść go w pliku z rozszerzeniem ''.php'' na serwerze, - korzystając z przeglądarki uruchom program, - korzystając z pomocy innego studenta uruchomcie ten sam program współbieżnie, - jaki jest czas wykonania programu w w/w przypadkach? ==== Informacje dodatkowe: Blokowanie dostępu za pomocą pliku (file lock) ===== Dany jest kod: echo 'Wejscie do sekcji krytycznej
'; $start=time(); $fp = fopen('semafor', 'r+'); if (flock($fp, LOCK_EX)) { echo 'Jestem w sekcji krytycznej
'; /* tutaj kod sekcji krytycznej */ flock($fp, LOCK_UN); echo 'Wyjscie z sekcji krytycznej
'; echo 'Czas wykoania: '.(time()-$start).'
'; } else { echo 'Problemy z blokada...
';} fclose($fp);
Działanie w/w kodu możesz przetestować w poniższy sposób: - dodaj odpowiednie znaczniki i umieść go w pliku z rozszerzeniem ''.php'' na serwerze, - w tym samym katalogu utwórz plik ''semafor'', - za pomocą przeglądarki uruchom skrypt, - korzystając z pomocy innego studenta uruchomcie skrypt współbieżnie, - jaki jest czas wykonania skryptu w w/w przypadkach?