Narzędzia użytkownika

Narzędzia witryny


pl:paw:lab_paw_php_3

To jest stara wersja strony!


Laboratorium, PHP # 3

Ćwiczenie 1: Ciastka

Przetestuj działanie poniższego kodu:

  1. jaka jest zawartość zmiennej $_COOKIE przy pierwszym uruchomnieniu,
  2. 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:

  1. uruchom skrypt,
  2. odczekaj ok. 5 sekund, uruchom ponownie,
  3. 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:

  1. przy pierwszej wizycie użytkownika poprosi o jego imię,
  2. przy każdej następnej wyświetli imię,
  3. dodaj datę i godzinę ostatniej wizyty, oraz
  4. mechanizm zapominania imienia.

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['clear'])){
        echo 'clear';
        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.

  1. Do galerii można dodawać obrazki w formacie JPG, które są przechowywane w wybranym katalogu.
  2. 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.
  3. 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<br>';
  $start=time();
  sem_acquire($sem);
  echo 'Jestem w sekcji krytycznej<br>';
  /* tutaj kod sekcji krytycznej */
  sem_release($sem);
  echo 'Wyjscie z sekcji krytycznej<br>';
  echo 'Czas wykoania: '.(time()-$start).'<br>';
} else {echo 'Problemy z semaforem...<br>';}

Działanie w/w kodu możesz przetestować w poniższy sposób:

  1. dodaj odpowiednie znaczniki i umieść go w pliku z rozszerzeniem .php na serwerze,
  2. korzystając z przeglądarki uruchom program,
  3. korzystając z pomocy innego studenta uruchomcie ten sam program współbieżnie,
  4. 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<br>';
$start=time();
$fp = fopen('semafor', 'r+');
if (flock($fp, LOCK_EX)) {
  echo 'Jestem w sekcji krytycznej<br>';
  /* tutaj kod sekcji krytycznej */
  flock($fp, LOCK_UN);
  echo 'Wyjscie z sekcji krytycznej<br>';
  echo 'Czas wykoania: '.(time()-$start).'<br>';
} else { echo 'Problemy z blokada...<br>';}
fclose($fp);

Działanie w/w kodu możesz przetestować w poniższy sposób:

  1. dodaj odpowiednie znaczniki i umieść go w pliku z rozszerzeniem .php na serwerze,
  2. w tym samym katalogu utwórz plik semafor,
  3. za pomocą przeglądarki uruchom skrypt,
  4. korzystając z pomocy innego studenta uruchomcie skrypt współbieżnie,
  5. jaki jest czas wykonania skryptu w w/w przypadkach?
pl/paw/lab_paw_php_3.1610117282.txt.gz · ostatnio zmienione: 2021/01/08 15:48 przez wojnicki