home_site

Lab08 - Język PHP, sesje, uwierzytelnienie [ ver. TI.2025.11.17.003 ]

Zawartość strony

Plan zajęć

Z1. Programowanie obiektowe czy proceduralne

W ramach tego punktu przedstawione zostaną dwa skrypty wykonujące tę samą funkcjonalność, jednak zrealizowane w odmiennych stylach programowania. Pierwszy zgodnie z standardem programowania proceduralnego, drugi zgodnie z standardem wzorca obiektowego - przetworzone zostaną dane przesłane metodą POST protokołu HTTP z formularza logowania.

  1. Skrypt rejestracyjny w HTML (zad01.html).

    Plik zad01.html - ( [listing dokumentu] [link do dokumentu]

       <!DOCTYPE HTML>
    <html>
      <head>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <title>Formularz rejestracyjny</title>
      </head>
      <body>
         <form name="test" method="post" action="zad01p.php">
            Podaj imię:<input type="text" name="fname"><br/>
            Podaj nazwisko:<input type="text" name="lname"><br/>
            Podaj e-mail:<input type="text" name="email"><br/>
            Podaj hasło:<input type="text" name="pass">
            <input type="submit">
         </form>   
      </body>
    </html>
  2. Skrypt php napisany zgodne z paradygmatem proceduralnym (zad01p.php).

    Plik zad01p.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    
    $fname = $_POST['fname'] ;
    $lname = $_POST['lname'] ;
    $email = $_POST['email'] ;
    $pass = $_POST['pass'] ;
    
    
    echo "Wprowadzone dane (proceduralnie) <br/>" ;
    echo "Imię: ". $fname ." <br/>" ;   
    echo "Nazwisko: ". $lname ." <br/>" ;
    echo "E-mail: ". $email ." <br/>" ;
    echo "Hasło: ". $pass ." <br/>" ;          
    
    
    ?>  
  3. Poniżej skrypty napisane zgodnie z paradygmatem obiektowym. Na początek tworzymy skrypt zawierający klasę Register (Register.php).

    Plik Register.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    
    class Register {
    
       protected $data = array()  ;
    
       function __construct () { 
       }
          
       function _read () {
          $this->data['fname'] = $_POST['fname'] ;
          $this->data['lname'] = $_POST['lname'] ;
          $this->data['email'] = $_POST['email'] ;
          $this->data['pass']  = $_POST['pass'] ;
       }          
    
       function _write () {
          echo "Wprowadzone dane (obiektowo) <br/>" ;
          echo "Imię: ". $this->data['fname'] ." <br/>" ;   
          echo "Nazwisko: ". $this->data['lname'] ." <br/>" ;
          echo "E-mail: ". $this->data['email'] ." <br/>" ;
          echo "Hasło: ". $this->data['pass'] ." <br/>" ; 
       }  
    }
    ?>  
  4. Poniżej skrypt wykorzystujący przygotowaną klasę Register odczytujący dane przesłane z formularza (zad01o.php).

    Plik zad1o.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    
    include "Register.php" ;
    
    $reg = new Register ;
    $reg->_read();
    $reg->_write();
                 
    ?>  

Z2. Tablice globalne

  1. Poniżej przedstawiono skrypt zawierający klasę Server odczytującą tablice globane SERVER, POST, GET, COOKIE i SESSION (Server.php).

    Plik Server.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    
    class Server {
    
      function prn_server () {
         echo 'Tablica $_SERVER ';
         echo "================= ";
         foreach ( $_SERVER as $key => $value )
            print '$_SERVER['.$key.'] = '.$value.'<br>' ;
      }
    
      function prn_post () {
         echo 'Tablica $_POST ';
         echo "=============== ";
         foreach ( $_POST as $key => $value )
            print '$_POST['.$key.'] = '.$value.'<br>' ;
      }  
    
      function prn_get () {
         echo 'Tablica $_GET ';
         echo "============== ";
         foreach ( $_GET as $key => $value )
            print '$_GET['.$key.'] = '.$value.'<br>' ;
      }
    
      function prn_cookie () {
         echo 'Tablica $_COOKIE ';
         echo "================= ";
         foreach ( $_COOKIE as $key => $value )
            print '$_COOKIE['.$key.'] = '.$value.'<br>' ;
      }
    
      function prn_session () {
         echo 'Tablica $_SESSION ';
         echo "================== ";
         foreach ( $_SESSION as $key => $value )
            print '$_SESSION['.$key.'] = '.$value.'<br>' ;
      }
    }
    
    ?>  
  2. Skrypt drukujący wartości tablic globalnych z wykorzystaniem wcześniej przygotowanej klasy Server (zad02.php). W ramach skryptu wykorzystamy funkcje __autoload().

    Plik zad02.php - ( [listing dokumentu] [link do dokumentu]

    <?php    
    /* php5, php7
    function __autoload($class_name) {
        include $class_name . '.php' ;
    }
     */
    
    function my_autoloader($class) {
        include  $class . '.php';
    }
    
    spl_autoload_register('my_autoloader');
    
    /* Or, using an anonymous function
    spl_autoload_register(function ($class) {
        include  $class . '.php';
    });
    */
    
    $obj = new Server() ;
    
    $obj->prn_server() ;
    $obj->prn_post() ;
    $obj->prn_get() ;
    $obj->prn_cookie() ;
    $obj->prn_session() ;
    
    ?>  

Z3. Obsługa zmiennych sesyjnych

Lab9_session
Sesje w serwisie WWW.
  1. Klasa User będąca rozszerzeniem klasy Register o funkcje obsługujące zmienne sesyjne (User.php).

    Plik User.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    
    class User extends Register {
    
       private $ident = 'test' ;
       private $auth = false ;
    
       function __construct () {
          parent::__construct() ;  
    	  session_set_cookie_params([
                'lifetime' => 360,
                'path' => '/~user/',                 // konto na ktorym dziala serwis 
                'domain' => $_SERVER['HTTP_HOST'],
                'secure' => false,                   // serwer Pascal - tylko http
                'httponly' => false,
                'samesite' => 'LAX'
            ]);	  	  
          session_start() ;
       }              
    
       function setSession () {
          $_SESSION["ident"] = $this->ident ;
       }
    
       function destroySession() {
          $_SESSION = array() ;
          if ( isset($_COOKIE[session_name()]) ) {
              setcookie( session_name(), '', time()-42000, '/') ;
           }
           session_destroy();
        }    
    }
    
    ?>  
  2. Ustawienie zmiennych sesyjnych (zad03a.php).

    Plik zad03a.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    /* php5, php7
    function __autoload($class_name) {
        include $class_name . '.php' ;
    }
     */
    
    function my_autoloader($class) {
        include  $class . '.php';
    }
    
    spl_autoload_register('my_autoloader');
    
    /* Or, using an anonymous function
    spl_autoload_register(function ($class) {
        include  $class . '.php';
    });
    */
    
    $user = new User();
    $user->setSession() ;
    
    $obj = new Server();
    $obj->prn_cookie();
    $obj->prn_session();
    
    ?>  
  3. Sprawdzenie wartości zmiennych sesyjnych (zad03b.php).

    Plik zad03b.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    /* php5, php7
    function __autoload($class_name) {
        include $class_name . '.php' ;
    }
     */
    
    function my_autoloader($class) {
        include  $class . '.php';
    }
    
    spl_autoload_register('my_autoloader');
    
    /* Or, using an anonymous function
    spl_autoload_register(function ($class) {
        include  $class . '.php';
    });
    */
    
    $user = new User();
    
    $obj = new Server();
    $obj->prn_cookie();
    $obj->prn_session();
    
    ?>  
  4. Usunięcie sesji (zad03c.php).

    Plik zad03c.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    /* php5, php7
    function __autoload($class_name) {
        include $class_name . '.php' ;
    }
     */
    
    function my_autoloader($class) {
        include  $class . '.php';
    }
    
    spl_autoload_register('my_autoloader');
    
    /* Or, using an anonymous function
    spl_autoload_register(function ($class) {
        include  $class . '.php';
    });
    */
    
    $user = new User();
    $user->destroySession();
    
    $obj = new Server();
    $obj->prn_cookie();
    $obj->prn_session();
    
    ?>  

Z4. Rejestracja i logowanie użytkownika do serwisu

W ramach aplikacji wykorzystamy bazę danych klucz - wartość ( BerkeleyDB ), która jest zaimplementowana w języku php poprzez interfejs dbm. W pliku bazy danych dane są zapisywane w postaci klucz - wartość. Klucz jest zmienną typu "string". W ramach bazy danych możemy tylko przeszukiwać po kluczu i wartości klucza są posortowane - BTree. Pole wartość też jest typu "string" i wymagana jest serializacja obiektów jeżeli zapisujemy w bazie danych.

W ramach tego zadania utworzymy klasę Register_new, która jest rozszerzeniem klasy Register i do której dodawać będziemy kolejne funkcjonalności. Funkcje, które będą opracowywane to: zapis do bazy danych, logowanie do serwisu, wylogowanie z serwisu, wydruk danych użytkownika i wydruk wszystkich użytkowników zarejestrowanych w serwise.

  1. Skrypt sterujący serwisem - zad04.php.

    Plik zad04.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    /* php5, php7
    function __autoload($class_name) {
        include $class_name . '.php' ;
    }
     */
    
    function my_autoloader($class) {
        include  $class . '.php';
    }
    
    spl_autoload_register('my_autoloader');
    
    /* Or, using an anonymous function
    spl_autoload_register(function ($class) {
        include  $class . '.php';
    });
    */
    
    $user = new Register_new;
    
    /* Funkcjonalnosc zakomentowana - brak metody _is_logged()
    if ( ! $user->_is_logged() )
      {  
    */
         echo "<p><a href='zad04reg.html'>Rejestracja w serwisie</a></p>";
         echo "<p><a href='zad04log.html'>Logowanie do serwisu</a></p>";
    /*
      } 
    else
      {
         echo "<p><a href='zad04user.php'>Dane uzytkownika</a></p>" ;
         echo "<p><a href='zad04all.php'>Zarejestrowani uzytkownicy</a></p>" ;
         echo "<p><a href='zad04out.php'>Wylogowanie z serwisu</a></p>" ;
      }
    */
    ?>  
  2. Zapisanie danych z rejestracji użytkownika do bazy danych.

    Do realizacji tego zadania wykorzystamy plik z punktu Z1 - plik formularza (zad01.html) i plik obsługi w php (zad01o.php). Po zmodyfikowaniu ich zawartość zawierają odpowiednio plik zad04reg.html i plik zad04reg.php.

    • Plik zad04reg.html (formularz).

      Plik zad04reg.html - ( [listing dokumentu] [link do dokumentu]

      <!DOCTYPE HTML>
      <html>
        <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>Formularz rejestracyjny</title>
        </head>
        <body>
           <form name="test" method="post" action="zad04reg.php">
              Podaj imię:<input type="text" name="fname"><br/>
              Podaj nazwisko:<input type="text" name="lname"><br/>
              Podaj e-mail:<input type="text" name="email"><br/>
              Podaj hasło:<input type="text" name="pass">
              <input type="submit">
           </form>   
        </body>
      </html>  
    • Plik zad04reg.php (obsługa formularza).

      Plik zad04reg.php - ( [listing dokumentu] [link do dokumentu]

      <?php
      /* php5, php7
      function __autoload($class_name) {
          include $class_name . '.php' ;
      }
       */
      
      function my_autoloader($class) {
          include  $class . '.php';
      }
      
      spl_autoload_register('my_autoloader');
      
      /* Or, using an anonymous function
      spl_autoload_register(function ($class) {
          include  $class . '.php';
      });
      */
      
      $reg = new Register_new ;
      $reg->_read();
      $reg->_write();
      echo $reg->_save();
      echo "<p><a href='zad04.php'>Powrot do programu glownego</a></p>";
                  
      ?>
        
    • Na koniec tworzymy klasę Register_new, która zawiera metodę _save().

      Plik Register_new.php - ( [listing dokumentu] [link do dokumentu]

      <?php
      class Register_new extends Register {
      
         private $dbh;
         private $dbfile = "files/datadb.db" ;
      
         function __construct () {
            parent::__construct() ;  
      	  session_set_cookie_params([
                  'lifetime' => 360,
                  'path' => '/~user/',                 // konto na ktorym dziala serwis 
                  'domain' => $_SERVER['HTTP_HOST'],
                  'secure' => false,                   // serwer Pascal - tylko http
                  'httponly' => false,
                  'samesite' => 'LAX'
              ]);	  	  
            session_start() ;
         }
      
      /*
       *  Zapis danych do bazy
       */
      
         function _save () {
            $this->dbh = dba_open( $this->dbfile, "c");
            if ( ! dba_exists($this->data['email'], $this->dbh ) ) {
               $serialized_data = serialize($this->data) ;
               dba_insert($this->data['email'],$serialized_data, $this->dbh) ;
               $text = 'Dane zostały zapisane' ;
            } else {          
               $text = 'Dane dla podanego adresu e-mail sa w bazie danych' ;
            }
            dba_close($this->dbh) ;
            return $text;
         }  
      }
      ?>  
  3. Logowanie użytkownika do serwisu.

    W ramach tego punktu utworzymy metody do klasy Register_new - logowania _login() i sprawdzającą czy użytkownik jest zalogowany _is_logged(). Dodatkowo do realizacji zadania zostanie utworzony formularz logowania zad04log.html i skrypt obsługujący ten formularz zad04log.php.

    • Dodatkowe metody do klasy Register_new.

      Plik method_login.php - ( [listing dokumentu] [link do dokumentu]

      <?php
      
      /*
       * Logowanie uzytkownika do serwisu 
       */
      
         function _login() {
            $email = $_POST['email'] ;
            $pass  = $_POST['pass'] ;
            $access = false ;
            $this->dbh = dba_open( $this->dbfile, "r");   
            if ( dba_exists( $email, $this->dbh ) ) {
               $serialized_data = dba_fetch($email, $this->dbh) ;
               $this->data = unserialize($serialized_data);
               if ( $this->data['pass'] == $pass ) {
                  $_SESSION['auth'] = 'OK' ;
                  $_SESSION['user'] = $email ;
                  $access = true ;
               } 
            }      
            dba_close($this->dbh) ;   
            $text = ( $access ? 'Uzytkownik zalogowany' : ' Uzytkownik nie zalogowany ' ) ;
            return $text ;
      
         }
      
      /*
       * Sprawdzamy czy uzytkownik jest zalogowany 
       */
      
         function _is_logged() {
            if ( isset ( $_SESSION['auth'] ) ) { 
               $ret = $_SESSION['auth'] == 'OK' ? true : false ;
            } else { $ret = false ; }
            return $ret ;
         } 
      
      
      ?>  
    • Plik formularza logowania zad04log.html

      Plik zad04log.html - ( [listing dokumentu] [link do dokumentu]

      <!DOCTYPE HTML>
      <html>
        <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>Logowanie do serwisu</title>
        </head>
        <body>
           <form name="test" method="post" action="zad04log.php">
              Podaj e-mail:<input type="text" name="email"><br/>
              Podaj hasło:<input type="text" name="pass"><br/>
              <input type="submit">
           </form>   
        </body>
      </html>  
    • Skrypt obsługujący formularz logowania zad04log.php.

      Plik zad04log.php - ( [listing dokumentu] [link do dokumentu]

      <?php
      /* php5, php7
      function __autoload($class_name) {
          include $class_name . '.php' ;
      }
       */
      
      function my_autoloader($class) {
          include  $class . '.php';
      }
      
      spl_autoload_register('my_autoloader');
      
      /* Or, using an anonymous function
      spl_autoload_register(function ($class) {
          include  $class . '.php';
      });
      */
      
      $user = new Register_new;
      
      echo $user->_login() ;
      echo "<p><a href='zad04.php'>Powrot do programu glownego</a></p>";
                  
      ?>
        
  4. W kolejnym punkcie opracujemy wylogowanie z serwisu. Potrzebujemy dodatkowej metody w klasie Register_new oraz pliku zad04out.php realizującego wylogowanie.
    • Metoda _logout() wylogowująca użytkownika w klasie Register_new.

      Plik method_logout.php - ( [listing dokumentu] [link do dokumentu]

      <?php
      
      /*
       * Wylogowanie uzytkownika do serwisu 
       */
      
         function _logout() {
            unset($_SESSION); 
            session_destroy();   
            $text =  'Uzytkownik wylogowany ' ;
            return $text ;
         }
      
      ?>  
    • Plik zad04out.php odpowiedzialny za wylogowanie.

      Plik zad04out.php - ( [listing dokumentu] [link do dokumentu]

      <?php
      /* php5, php7
      function __autoload($class_name) {
          include $class_name . '.php' ;
      }
       */
      
      function my_autoloader($class) {
          include  $class . '.php';
      }
      
      spl_autoload_register('my_autoloader');
      
      /* Or, using an anonymous function
      spl_autoload_register(function ($class) {
          include  $class . '.php';
      });
      */
      
      $user = new Register_new;
      
      echo $user->_logout() ;
      echo "<p><a href='zad04.php'>Powrot do programu glownego</a></p>";
      
      ?>  
  5. W ostatnim punkcie dodamy dwie funkcjonalności dostępne dla zalogowanego użytkownika - przeglądanie użytkowników zarejestrowanych w bazie danych oraz wyświetlenie wszystkich danych zalogowanego użytkownika. Do realizacji zadania potrzebujemy dodatkowych metod w klasie Register_new oraz odpowiednich skryptów wyświetlających powyższe informacje.
    • Na początek metody do klasy Register_new: _read_user() i _read_all().

      Plik method_read.php - ( [listing dokumentu] [link do dokumentu]

      <?php
      
      /*
       * Pobranie danych uzytkownika z bazy 
       */
      
         function _read_user() {
            $email = $_SESSION['user'] ;
            $this->dbh = dba_open( $this->dbfile, "r");   
            if ( dba_exists( $email, $this->dbh ) ) {
               $serialized_data = dba_fetch($email, $this->dbh) ;
               $this->data = unserialize($serialized_data);
            }   
            dba_close($this->dbh) ;   
         }
      
      /*
       * Pobranie danych uzytkownikow z bazy 
       */
      
         function _read_all() {
            $table = array();
            $this->dbh = dba_open( $this->dbfile, "r");   
            $key = dba_firstkey($this->dbh);
            while ($key) {
               $serialized_data = dba_fetch($key, $this->dbh) ;
               $this->data = unserialize($serialized_data);
               $table[$key]['email'] = $this->data['email'];
               $table[$key]['fname'] = $this->data['fname'];
               $table[$key]['lname'] = $this->data['lname'];
               $key = dba_nextkey($this->dbh);
            }    
            dba_close($this->dbh) ;  
            return $table;
         }
      
      ?>  
    • Plik wyświetlający dane zalogowanego użytkownika - zad04user.php.

      Plik zad04user.php - ( [listing dokumentu] [link do dokumentu]

      <?php
      /* php5, php7
      function __autoload($class_name) {
          include $class_name . '.php' ;
      }
       */
      
      function my_autoloader($class) {
          include  $class . '.php';
      }
      
      spl_autoload_register('my_autoloader');
      
      /* Or, using an anonymous function
      spl_autoload_register(function ($class) {
          include  $class . '.php';
      });
      */
      
      $user = new Register_new ;
      
      if ( $user->_is_logged() ) { 
         $user->_read_user();
         echo $user->_write();
         echo "<p><a href='zad04.php'>Powrot do programu glownego</a></p>";
      }
      
      ?>  
    • Plik wyświetlający wybrane dane zarejestrowanych użytkowników - zad04all.php.

      Plik zad04all.php - ( [listing dokumentu] [link do dokumentu]

      <?php
      /* php5, php7
      function __autoload($class_name) {
          include $class_name . '.php' ;
      }
       */
      
      function my_autoloader($class) {
          include  $class . '.php';
      }
      
      spl_autoload_register('my_autoloader');
      
      /* Or, using an anonymous function
      spl_autoload_register(function ($class) {
          include  $class . '.php';
      });
      */
      
      $user = new Register_new ;
      
      if ( $user->_is_logged() ) { 
         $table = $user->_read_all();
         echo "<table><tr><th>Nazwisko</th><th>Imie</th><th>E-mail</th></tr>" ;
         foreach ( $table as $key => $record ) {
           echo "<tr><td>".$record['fname']."</td><td>".$record['lname']."</td><td>".$record['email']."</td><tr>";
         }
         echo "</table>" ;
         echo "<p><a href='zad04.php'>Powrot do programu glownego</a></p>";
      }
      
      ?>  

Z5. Obsługa XML w php

  1. Plik zawierający dokument XML (zad05.xml).

    Plik zad05.xml - ( [listing dokumentu] [link do dokumentu]

    <?xml version="1.0" ?>
    <zajecia>
      <nazwa>techniki internetowe</nazwa>
      <termin>poniedzialek, 10.00</termin>
      <sala>D10, lab. 206</sala>
      <studenci>
       <student>
         <nazwisko>Abacki</nazwisko>
         <imie>Adam</imie>
         <email>abacki@agh.edu.pl</email>
       </student>
       <student>
         <nazwisko>Backi</nazwisko>
         <imie>Krzysztof</imie>
         <email>backi@agh.edu.pl</email>
       </student>
       <student>
        <nazwisko>Ewa</nazwisko>
        <imie>Cabacka</imie>
        <email>cabacka@agh.edu.pl</email>
       </student>
     </studenci>
    </zajecia>  
  2. Plik zawierający formatowanie dokumentu XML zgodnie z standardem XSL (zad05.xsl).

    Plik zad05.xsl - ( [listing dokumentu] [link do dokumentu]

    <?xml version="1.0"  standalone="no" ?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml"
    encoding="UTF-8"
    indent="yes"
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
    <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>zadanie 1 - przetwarzanie dokumentow XML</title>
    <meta name="author" content="Antoni Dydejczyk" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link type="text/css" href="zajecia.css" rel="stylesheet" />
    </head>
    <body>
    <p class="title" >Przykladowe rozwiazanie zadania 1</p>
    <p class="zajecia" >
    Zajecia: <span><xsl:value-of select="//zajecia/nazwa" /></span>,
    termin: <span><xsl:value-of select="//zajecia/termin" /></span>,
    sala: <span><xsl:value-of select="//zajecia/sala" /> </span> </p>
    <table>
    <tr><th>Nazwisko</th><th>Imie</th><th>e-mail</th></tr>
    <xsl:apply-templates select="//studenci" />
    </table>
    </body>
    </html>
    </xsl:template>
    <xsl:template match="studenci">
    <xsl:for-each select="//student" >
    <xsl:sort select="./nazwisko/text()" />
    <tr xmlns="http://www.w3.org/1999/xhtml">
    <td><xsl:value-of select="nazwisko" /></td>
    <td><xsl:value-of select="imie" /></td>
    <td><xsl:value-of select="email" /></td>
    </tr>
    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>
    
      
  3. Skrypt przetwarzający dane XML w języku php (zad05.php).

    Plik zad05.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    /*
       Przyklad przetwarzania dokumnetu XML z wykorzystaniem XSL.
    */
    
          $xmlfile = 'zad05.xml' ;
          $xslfile = 'zad05.xsl' ;
    
          // date_default_timezone_set('Europe/Berlin');
          // $fdate = date ("d M Y",filemtime($xmlfile));
          $xml = new DOMDocument;
          $xml->load($xmlfile);
          //echo $xml->saveXML();
          $xsl = new DOMDocument;
          $xsl->load($xslfile);
          $proc = new XSLTProcessor;
          $proc->importStyleSheet($xsl); // attach the xsl rules
          // $proc->setParameter ('', 'fdate', $fdate );
          $template = $proc->transformToXML($xml);
          print $template ;
    ?>  

Z6. Szablony w php

  1. Klasa Template obsługująca szablony (Template.php)..

    Plik Template.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    
    class Template {
    
        private $page ;
        private $f_page ;
    
        function read( $source ) {
          $this->page = implode('',file($source)) ;
          // echo $this->page;
          return ;
        }
    
        function merge( $data ) {
          // print_r ($data) ;
          $this->f_page = preg_replace_callback('/{([^}]+)}/',
                             function($matches) use ($data) {  return $data[str_replace(array('{','}'),'',$matches[0])] ;},
                             $this->page) ;
          // print $this->f_page;
          return ;
        }
    
        function write() {
          return  $this->f_page ;
        }
    
    }
    ?>
    
      
  2. Szablon w języku HTML (zad06.tpl).

    Plik zad06.tpl - ( [listing dokumentu] [link do dokumentu]

    <!DOCTYPE html>
    <html> 
    <head>
    	<meta http-equiv="Content-Type" content="text/html; 
    	charset=UTF-8" />
    	<title>Przyklad wykorzystania szablonow - 1</title>
    	<link rel="stylesheet" type="text/css" href="szablony.css" />
    </head>
    <body>
     <div class="ramka">
       <p class="tytul" >REFERAT</p>
       <p> <span class="bold" >Tytuł:</span>{tytul}</p>
       <p> <span class="bold" >Data:</span>{data}</p>
       <p> <span class="bold" >Prelegent:</span>{name}</p>    <br />
       <p class="italic" >{opis}</p>
      </div>
    </body>
    </html>  
  3. Skrypt w php wykorzystujący klasę Template obsługującą szablony (zad06.php).

    Plik zad06.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    /* php5, php7
    function __autoload($class_name) {
        include $class_name . '.php' ;
    }
     */
    
    function my_autoloader($class) {
        include  $class . '.php';
    }
    
    spl_autoload_register('my_autoloader');
    
    /* Or, using an anonymous function
    spl_autoload_register(function ($class) {
        include  $class . '.php';
    });
    */
    
    $page = new Template() ;
    
    $data['tytul'] = " Szablony ";  
    $data['opis']  = " Prosty program ";
    $data['name']  = " A. Dydejczyk ";  
    $data['data']  = " 17 listopad 2025 ";
    
    $file = "zad06.tpl" ;
    
    $page->read($file);
    $page->merge($data);
    echo $page->write();
    
    ?>  

Z7. Metody magiczne w php

Metody magiczne nie sa jawnie wywoływane. Ich funkcjonalność pojawia się w określonych sytuacjach. Poniżej przedstawione zostały metody magiczne i ich opis działania.

__construct
Wywoływana automatycznie podczas inicjalizacji obiektu.
__destruct
Wywoływana przed usunięciem obiektu.
__get
Obsługuje próbę dostępu do atrybutu, który nie istnieje lub jest niewidoczny dla klasy.
__set
Obsługuje próbę zapisu do atrybutu, który nie istnieje lub jest niewidoczny dla klasy.
__isset
Wywołanie funkcji isset() lub empty() dla atrybutu, który nie istnieje lub jest niewidoczny dla klasy.
__unset
Wywołanie funkcji unset(), który nie istnieje lub jest niewidoczny dla klasy.
__call
Wywołanie nieistniejącej metody.
__callstatic
Wywołanie nieistniejącej metody statycznej.
__sleep
Wywoływana gdy serializujemy jakiś obiekt za pomocą funkcji serialize(). Zwraca tablicę z danymi.
__wakeup
Wywoływana gdy deserializujemy za pomocą funkcji unserialize().
__toString
Wywoływana, kiedy nastąpi próba przekonwertorowania obiektu na tekst.
__clone
Wywoływana, kiedy nastąpi klonowanie obiektu z wykorzystaniem operatora clone.
__invoke
Pozwala na odwołanie się do obiektu jak do zwykłej funkcji, parametry są przekazywane jako parametry metody __invoke().
  1. Skrypt prezentujący wybrane metody magiczne (zad07.php).

    zad07.php - ( [listing dokumentu] [link do dokumentu]

    <?php
    
    class Magic
    {
        private $myArray = array();
        public function __set($prop, $value) {
            $this->myArray[$prop] = $value;
        }
        public function __get($prop) {
            return $this->myArray[$prop];
        }
        public function __isset($prop) {
            return isset($this->myArray[$prop]);
        }
        public function __unset($prop) {
            unset($this->myArray[$prop]);
        }
        public function __toString() {
            return "class {". __CLASS__ . "} method {". __METHOD__ ."} :" . $this->name;
        }
    }
    $obj = new Magic();
    if (!isset($obj->name)) {
        $obj->name = "Krakow";
    }
    echo $obj->name."<br/>"; 
    echo $obj."<br/>"; 
    echo "dir {".__DIR__."} file {". __FILE__ ."} line {". __LINE__ ."}" ;
    
    ?>  

Linki do uruchomionych przykładów na serwerze Pascal

Linki dostępne z sieci wydziałowej.