j zyk php -...

49

Upload: vocong

Post on 11-Aug-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

J zyk PHP��PHP (PHP: Hypert ext Preprocessor) �PHP a CGI�Dokum ent HTML z inst rukcjam i

AddType application/x-httpd-php .phpAddType application/x-httpd-php-source .phps

J zyk PHP c.d.�

� Obs ugiwane BD, �IBM DB2, Inform ix, Ingres, InterBase, Front Base, mSQL, Direct MS-SQL, MySQL, ODBC, Oracle (OCI7 i OCI8), Ovrimos, PostgreSQL, Solid, Sysbase, Velocis, Unix dbm, ...

� Obs ugiwane protoko y: � �IMAPPOP3HTTP...

PHP - przyk adowy program�<html><head><title>Prosty program PHP</title></head><body><h1>Prosty program PHP</h1><?php echo �Jestem PHP�; ?>Jestem HTML<? echo (�Jestem PHP�); ?></body></html>

Page 2: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Umieszczanie skryptu PHP

�< ?php t re skryptu�� ?>�< ? t re skryptu�� ?>�< script language= "php"> t re ��

skryptu< /script>� < % t re skryptu�� %>

Instrukcje

< ?phpInst rukcja1;Inst rukcja2;..Inst rukcjaN

?>

Komentarze

// jestem komentarzem# jestem komentarzem/* jestem komentarzem */

Page 3: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Typy zmiennych

� Logiczny (boolean)� Ca kowity (integer)�� Rzeczywisty (f loat )� Napisowy (st ring)� Tablica (array)� Obiekt (object )� Zasób (resource)� NULL

Typ logiczny

�Przy jm owane warto ci: True lub �False

Case-insensit ive�Konwertowanie na typ logiczny

(bool)(boolean)

Typ ca kowity�� Notacje:

Dziesi tkowa - � 1234Heksadecymalna - 0x1AOktalna � 0123

� Konwertowanie na typ ca kowit y�(int )(integer)

$liczba1 = 2147483647;$liczba2 = 2147483648;var_dump($liczba1);// wypisze: int(2147483647)var_dump($liczba2);// wypisze: float(2147483648)

Page 4: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Typ rzeczywisty

�Przyk adowe warto ci� �1.2341.2e3 //1.2 * 103

7E-10 //7 * 10-10

�Konwertowanie na typ rzeczywisty(f loat )(double)(real)

Typ napisowy

�256 ró nych warto ci� ��Tworzenie a cucha znaków� �

� tekst �� tekst �Sk adnia heredoc�Sk adnia newdoc�

�Konwertowanie na typ napisowy(st ring)st rval()

�tekst�

� \�� \\

$tekst = �ab\\c\�d\n�;echo $tekst; //wypisze: ab\c�d\n

Page 5: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

�tekst�

� \n� \r� \x[ 0-9A-Fa-f] { 1,2}

� \�� \\ � \$ � \[0-7] { 1,3} � \t

Sk adnia 'heredoc' oraz 'newdoc'�

$tekst = <<<KONIECAlama kotaKONIEC;

$tekst = <<<'KONIEC'Alama kotaKONIEC;

Heredoc Newdoc (PHP 5.3)

Parsowanie zmiennych$liczba = 5;$tekst1 = "Liczba = $liczba+3";$tekst2 = 'Liczba = $liczba+3';echo $tekst1;echo $tekst2;$beer=�Heineken�;echo �He drunk some ${beer}s�$tab[0][0]=62;echo �Warto =$tab[0][0]�;��echo �Warto ={$tab[0][0]}�;��...$obj -> b=4;echo �Warto ={$obj->b}mm;��

Liczba = 5+3Liczba = $liczba+3

He drunks some Heinekens

Warto =Array[0]��Warto =62��

Warto =4mm��

Page 6: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Indeksowanie a cucha� �

$tekst = �Ala ma kota�;echo $tekst[1]; //wypisze �l�

czenie a cuchów�� � �

$tekst = �Ala� . � ma� . � kota�;echo $tekst; //wypisze �Ala ma kota�

Konwersja a cuchów na posta � � �liczbow�

� � .� , � e� lub � E� � typ rzeczywisty�Brak � .� , � e� lub � E� � typ

ca kowity�� � 22a� �22� � a22� � 0

Page 7: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

a cuchy � wybrane funkcje� �

�st rlen()�st rst r(), st rist r()�print (), echo()�explode(), split ()

Tablica

�Klucz liczba ca kowita nieujem na�a cuch znaków � �

�Tworzeniearray() Tablica[klucz]= warto��

�Konwertowanie(array)

Przyk ad tworzenia tablic�$tablica1[0] = �Ala�;$tablica1[1] = �ma�;$tablica1[] = �kota�; //<=>$tablica1[2] = �kota�;$tablica2[�liczba1�] = 1;$tablica2[�liczba2�] = 67;

$tablica1 = array(0 => �Ala�,1 => �ma�,2 => �kota�);$tablica2 = array(�liczba1� => 1,�liczba2� => 67);

�Ala� �ma� �kota�0 1 2

1 67

�liczba2��liczba1�

warto��

klucz

klucz

warto��

�8� 8��08� �08��float int�False 0�True 1�NULL ���

Page 8: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Tablice - wybrane funkcje

�count ()�next ()�prev()�end()�current ()�sort (), asort (), arsort (), ksort (),

krsort (), uasort (), usort (), uksort ()

Tablice wielowymiarowe$tab[�liczba�][1] = 62;//$tab = array ( �liczba" => array ( 1 => 62)); echo "Warto = {$tab[�liczba�][1]}�;��

Klasyclass MojaKlasa{ var $z;

var $a=0;var $b=2+2; //b d ��

function metoda ($arg1, $arg2){

$this->z = $arg1 + $arg2; } function MojaKlasa (){

$this->b = 2*2; } }

Page 9: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Klasy - dziedziczenieclass MojaKlasa{ ... }

class MojaKlasa2 extends MojaKlasa{ var $r;

function metoda2 ($arg1, $arg2){

$this->r = $arg1 + $arg2; }}

ObiektyClass MojaKlasa{

//zawarto klasy taka jak na pop. slajdzie��}

$obiekt = new MojaKlasa;$obiekt-> metoda(2,2);/*********************/$obj = (object) �abc�;echo $obj->scalar; //wypisze �abc�

Konstruktory class A { function A(){ echo �A: konstruktor�; } function C(){ echo �A: metoda C()�; }}/**************/ class B extends A{}$b = new B();//wypisze: A: konstruktor

class A { function A(){ echo �A: konstruktor�; }} /**************/class B extends A{ function B($a=1){ echo �B: konstruktor �; echo �a=$a<br>�; }}$b = new B(); //B: konstruktor a=1$b = new B(10); //B: konstruktor a=10

Page 10: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Odwo ania do klasy�class A{ function pisz(){ echo "Metoda klasy A<br>"; }}class B extends A{ function pisz(){ echo "Metoda klasy B<br>"; A::pisz(); parent::pisz(); }}$b = new B;$b->pisz(); //wypisze://Metoda klasy B//Metoda klasy A//Metoda klasy A

Zmienne

�$zm ienna = warto���Case Sensit ive

Predefiniowane zmienne

� $_SERVER� $_ENV� $_COOKIE� $_GET� $_POST� $_FILES� $_REQUEST� $_SESSION� $GLOBALS� $php_errormsg

Page 11: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Zmienna zmienna

� Przyk ad�$a = "hello" ;$$a = "world";echo "$a ${ $a} "; // � echo "$a $hello";//wy wiet li: � hello world

� Zm ienne zm ienne jako tablice${ $a} [1] ${ $a[1] }${ $_GET}

Zmienne � wybrane funkcje

�get type()� is_array(), is_float (), is_int (),

is_object (), is_st ring(), �

Sta e�

� Definiowaniedefine(�LICZBA_PI�,3.1415926);define(�LICZBA_PI�,3.1415);// B d��

� Dost p�echo LICZBA_PI;

Page 12: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Predefiniowane sta e�

�__LINE__�PHP_VERSION�__CLASS__�__FUNCTION__

version_compare(PHP_VERSION, "5.0.0", "<") and echo( 'wymagany PHP w wersji, co najmniej, 5.0);

Przyk ad u ycia� �

Operatory arytmetyczne

�$a + $b�$a - $b�$a * $b�$a / $b�$a % $b

Operatory bitowe

�$a & $b�$a | $b�$a ^ $b�~ $a�$a < < $b�$a > > $b

Page 13: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Operatory porównania

� $a = = $b � $a = = = $b � $a ! = $b � $a < > $b � $a ! = = $b � $a < $b � $a > $b� $a < = $b� $a > = $b

Operatory logiczne

�$a && $b�$a and $b �$a || $b�$a or $b �$a xor $b � ! $a

Page 14: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Operatory przypisania

�$a = 3�$a + = 3 //$a =

$a + 3�$a -= 3�$a *= 3�$a /= 3�$a %= 3

�$a .= � abc��$a &= 111�$a |= 111 �$a ^ = 111 �$a < < = 111 �$a > > = 111

Instrukcja warunkowaif(warunek1) {

instrukcje1

}elseif(warunek2) {

instrukcje2

}...else {

instrukcjen

}

if(warunek1) :instrukcje1

elseif(warunek2) :instrukcje2

...else:

instrukcjen

endif;

Instrukcja wyboruswitch(wyra enie� ){case warto��1: instrukcje1

break;case warto��2: instrukcje2

break;..default: instrukcjen

break;}

switch(wyra enie� ):case warto��1: instrukcje1

break;case warto��2: instrukcje2

break;..default: instrukcjen

break;endswitch;

Page 15: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Instrukcja �while�

while(warunek){ instrukcje}

while(warunek): instrukcjeendwhile;

Instrukcja �do�

do{ instrukcje}while(warunek);

Instrukcja �for�

for(wyra enie� 1;wyra enie� 2 ;wyra enie� 3){instrukcje}

for(wyra enie� 1;wyra enie� 2 ;wyra enie� 3) :instrukcjeendfor;

Page 16: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Instrukcja �foreach�

�Sk adnia�foreach($tablica as $warto ) {instrukcje}��foreach($tablica as $klucz => $warto ) {instrukcje}��

�foreach� - przyk ad 1�$tablica = array (10, -2, 0); foreach ($tablica as $v) {

echo �bie ca warto \$tablica: $v.<br>\n"; �� ��}

bie ca warto $tablica: 10�� ��bie ca warto $tablica: -2�� ��bie ca warto $tablica: 0�� ��

�foreach� - przyk ad 2�$tablica = array ( �jeden" => 10, �dwa" => -2 , �trzy" => 0); foreach($tablica as $k => $v) {

print "\$tablica[$k] => $v.<br>\n"; }

$tablica[�jeden�] => 10$tablica[�dwa�] => -2$tablica[�trzy�] => 0

Page 17: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Instrukcja �break� $i = 0; while (++$i) {

switch ($i) { case 5:

echo �Przy 5<br>\n"; break 1; /* Przerwij �switch� */

case 10: echo �Przy 10; koniec<br>\n"; break 2; /* Przerwij �switch� i �while� */

default: break;

} }

Instrukcja �continue�

for($i = 0 ; $i < 10 ; $i++){if (($i % 2) != 0)

// przeskocz nieparzyste continue;

//wypisz parzysteecho �$i �;

}

0 2 4 6 8

Funkcje

�Tworzeniefunction fun ($arg_1, $arg_2, ..., $arg_n) {

echo �Przyk adowa funkcja.\n"; �return $wartosc;

}�Wywo ywanie �fun (wart1, wart2, ..., $wartn)

Page 18: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Funkcje ze zmienn liczb � �argumentów

funct ion f() {$liczbaArg = func_num_args();

echo � Liczba argumentów: $liczbaArg< br /> \n" ; echo � Drugi argument to: " . func_get_arg(1) . "< br /> \n" ; $listaArg = func_get_args(); for ($i = 0; $i < $liczbaArg; $i+ + ) { echo "Argument $i to: " . $listaArg[$i] . "< br /> \n" ; }}

f(1, 2, 3);

Zmienne funkcjefunction fun($arg) {

echo $arg;}$zmienna = �fun�;$zmienna(1); //wywo anie funkcji �fun��call_user_func(� fun' , 1); //wywo anie funkcji �fun��

Zmienne w funkcjach$a = 5; function Test() {

//global $a;echo $a;

} Test(); // wbrew pozorom NIE wy wietli si 5 � �

Page 19: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Zmienne w funkcjach c.d.

function Test() { $a = 0;$a++;echo $a;

} Test(); //wypisze si 1�Test(); //wypisze si 1 �

Zmienne w funkcjach c.d.function Test() {

static $a = 0;$a++;echo $a;

} Test(); //wypisze si 1�Test(); //wypisze si 2 �

Zwracanie warto ci w funkcji�function f(){

return 5;echo("Ten tekst si nie wy wietli");� �

}

funct ion & zwrocReferencje(){ return $jakasref;}

$nowaref = & zwrocReferencje();

Page 20: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Przekazywanie argumentów

$a=2;function f($arg){

$arg++;}fun($a);echo $a;//wypisze 2

$a=2;function f(&$arg){

$arg++;}fun($a);echo $a;//wypisze 3

Argumenty domy lne�

funct ion robPizza ($rozmiar,$typ = � Bolonia"){ return � Robi pizz rozmiar $rozm iar t ypu $typ.\n" ;� �}echo robPizza ();echo robPizza (� rednia� );�echo robPizza (� rednia� ,� peperone� );�

Robi pizz rozm iar typu Bolonia.� �Robi pizz rozm iar rednia typu Bolonia.� � �Robi pizz rozm iar rednia typu peperone.� � �

Obs uga formularzy�

�Metoda � GET� � $_GET �Metoda � POST� �$_POST�Nazwa pola � klucz

Page 21: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Obs uga formularzy - przyk ad� �

<form action=�skrypt.php" method="GET"><input type="TEXT" name=�imie" value=�Jan"><select name=�lista[]� MULTIPLE>...</select><input type="IMAGE" name=�akceptuj" value=�Jan"></form>

<?phpecho $_GET[�imie"]; //wy wietli �Jan��?>

skrypt.php

Dokument HTML

akceptuj.xakceptuj_x

Obs uga pól typu �file��

� $_FILES[ �plik '] [ 'nam e'] � $_FILES[ �plik '] [ ' t ype' ] � $_FILES[ �plik '] [ 'size' ] � $_FILES[ �plik '] [ ' tm p_nam e']� $_FILES[ �plik '] [ 'error ']

<form enctype="multipart/form-data" method=�POST�� > <input type="hidden" name="MAX_FILE_SIZE" value=�20000" > <input name=�plik" type="file" > �</form>

Obs uga pól typu FILE - przyk ad� �$max = 1024;if (is_uploaded_f ile($_FILES[ 'plik' ] [ ' tmp_name'] )) { if ($_FILES[ 'plik'] [ 'size' ] > $m ax) { echo 'Plik jest za duzy! ' ; } else{ echo �Odebrano plik � . $_FILES[ 'plik' ] [ 'name'] ; echo '< br> '; if ( isset($_FILES[ 'plik'] [ ' type' ] )) { echo 'Typ: ' .$_FILES[ 'plik' ] [ ' type' ] .'< br> ' ; } move_uploaded_file($_FILES[ 'plik'] [ 'tm p_name'] , �/usr/local/apache/htdocs/� . $_FILES[ 'plik'] [ 'name'] ); }}else { echo 'Blad przy przesylaniu danych! ' ;}

Page 22: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Dost p do plików�

� $plik = fopen($nazwa,$t ryb)$tryb = r | r+ | w | w+ | a | a+ | x | x+

� fclose($plik)� $znak = fgetc($plik)� $znaki = fread($plik,$n)� $linia = fgets($plik,$n)� fwrite($plik,$tekst ) � fputs($plik,$t ekst )� f lock($plik,$t ryb)

$tryb = LOCK_EX | LOCK_SH | LOCK_UN

Baza danych SQLite

�Biblioteka C�PHP 5 a SQLit e�Serwer SQLite = Serwer WWW�Autom atyczna synchronizacja

Page 23: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Utworzenie BD - przyk ad�<?php$db=sqlite_open(�baza-danych.sqlite�);sqlite_query($db,�

CREATE TABLE klienci (id INTEGER PRIMARY KEY,nazwa,adres

);INSERT INTO klienci VALUES (

NULL, \�Jan Kowalski\�, \�Kraków\�);

�);sqlite_close($db);

Funkcja �sqlite_open()�<?php$db=sqlite_open(�baza-danych.sqlite�);sqlite_query($db,�

CREATE TABLE klienci (id INTEGER PRIMARY KEY,nazwa,adres

);INSERT INTO klienci VALUES (

NULL, \�Jan Kowalski\�, \�Kraków\�);

�);sqlite_close($db);

Funkcja �sqlite_query()�<?php$db=sqlite_open(�baza-danych.sqlite�);sqlite_query($db,�

CREATE TABLE klienci (id INTEGER PRIMARY KEY,nazwa,adres

);INSERT INTO klienci VALUES (

NULL, \�Jan Kowalski\�, \�Kraków\�);

�);sqlite_close($db);

Page 24: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Pobieranie danych z BD

<?php$db=sqlite_open(�baza-danych.sqlite�);$idWyniku=sqlite_query($db,�SELECT * FROM klienci�);echo �Znaleziono �. sqlite_num_rows($idWyniku) . �klientów<br>�);while($wiersz=sqlite_fetch_array($idWyniku)){

echo $wiersz[�id�]. �<br>�;echo $wiersz[�nazwa�]. �<br>�;echo $wiersz[�adres�];

}sqlite_close($db);

Funkcja �sqlite_num_rows()�

<?php$db=sqlite_open(�baza-danych.sqlite�);$idWyniku=sqlite_query($db,�SELECT * FROM klienci�);echo �Znaleziono �. sqlite_num_rows($idWyniku) . �klientów<br>�);while($wiersz=sqlite_fetch_array($idWyniku)){

echo $wiersz[�id�]. �<br>�;echo $wiersz[�nazwa�]. �<br>�;echo $wiersz[�adres�];

}sqlite_close($db);

Funkcja �sqlite_fetch_array()�

<?php$db=sqlite_open(�baza-danych.sqlite�);$idWyniku=sqlite_query($db,�SELECT * FROM klienci�);echo �Znaleziono �. sqlite_num_rows($idWyniku) . �klientów<br>�);while($wiersz=sqlite_fetch_array($idWyniku)){

echo $wiersz[�id�]. �<br>�;echo $wiersz[�nazwa�]. �<br>�;echo $wiersz[�adres�];

}sqlite_close($db);

Page 25: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Funkcja �sqlite_create_function()�<?phpfunction moja($a){

return $a;}$db=sqlite_open(�baza-danych.sqlite�);$rows=sqlite_array_query($db,�SELECT php(�moja�,123) AS wynik�);...sqlite_create_function($db,�moja_SQL�,�moja�)$row=sqlite_array_query($db,�SELECT moja_SQL(123) AS wynik;�);echo $row[0][�wynik�]; //wypisze 123sqlite_close($db);

Funkcja �sqlite_create_aggegate()�<?php$data = array('one','two','three','four','five','six', 'seven','eight', 'nine','ten', );$dbhandle = sqlite_open(':memory:');sqlite_query($dbhandle, "CREATE TABLE strings(a)");foreach ($data as $str) { $str = sqlite_escape_string($str); sqlite_query($dbhandle, "INSERT INTO strings VALUES ('$str')");}

function max_len_step(&$context, $string) { if (strlen($string) > $context) { $context = strlen($string); }}

function max_len_finalize(&$context) { return $context;}

sqlite_create_aggregate($dbhandle, 'max_len', 'max_len_step', 'max_len_finalize');

var_dump(sqlite_array_query($dbhandle, 'SELECT max_len(a) from strings'));?>

PHP Data Objects (PDO)

�Zunifikowane rozszerzenie do obs ugi Baz Danych�

�AdoDB a PDO�PHP 5.1 zawiera PDO

Page 26: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Obs ugiwane BD�Sterownik Obs ugiwane BD�DBLIB FreeTDS / Microsoft SQL

Server / SysbaseFIREBIRD Firebird / Interbase 6MYSQL MySQL 3.x/4.0OCI Oracle Call Int erfaceODBC ODBC v3 (IBM DB2 i

unixODBCPGSQL PostgreSQLSQLITE SQLITE 3.x

Data Source Name (DSN)Sterownik DSNDBLIB sysbase:host= localhost ; dbnam e= testdb

m ssql:host= localhost ; dbname= testdbFIREBIRD firebird:User= john;Password= m ypass;Dabase=

DATABASE.GDE;DataSource= localhost ;Port= 3050

MYSQL m ysql:host= localhost ;dbnam e= t estdbOCI oci:m ydb

oci:dbname= //localhost :1521/test dbODBC odbc:DSN= SAMPLE;UID= john;PWD= mypassPGSQL pgsql:host= localhost port= 5432

dbnam e= testdb user= john password= m ypassSQLITE sqlite:/path/to/database

sqlite::m emory:

U ycie PDO�<?try{$db = new PDO("sqlite::memory:" );}catch( PDOException $e ){die( $e->getMessage() );}#$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );$stmt = $db->query( "CREATE TABLE links ( id INTEGER PRIMARY KEY, name TEXT, url TEXT);");$stmt = $db->query("INSERT INTO links VALUES (NULL,'WSZiB','http://www.wszib.edu.pl/');");$stmt = $db->query("INSERT INTO links VALUES (NULL,'AGH','http://www.agh.edu.pl/');");$stmt = $db->prepare( "SELECT * FROM links WHERE url = :url" );$url = "http://www.wszib.edu.pl/";$stmt->bindParam( ":url", $url );$stmt->execute();while( $row = $stmt->fetch() )

print_r( $row );$url = "http://www.agh.edu.pl/";$stmt->execute();while( $row = $stmt->fetch() )

print_r( $row );?>

Page 27: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Utworzenie obiektu<?try{$db = new PDO("sqlite::memory:" );}catch( PDOException $e ){die( $e->getMessage() );}#$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );$stmt = $db->query( "CREATE TABLE links ( id INTEGER PRIMARY KEY, name TEXT, url TEXT);");$stmt = $db->query("INSERT INTO links VALUES (NULL,'WSZiB','http://www.wszib.edu.pl/');");$stmt = $db->query("INSERT INTO links VALUES (NULL,'AGH','http://www.agh.edu.pl/');");$stmt = $db->prepare( "SELECT * FROM links WHERE url = :url" );$url = "http://www.wszib.edu.pl/";$stmt->bindParam( ":url", $url );$stmt->execute();while( $row = $stmt->fetch() )

print_r( $row );$url = "http://www.agh.edu.pl/";$stmt->execute();while( $row = $stmt->fetch() )

print_r( $row );?>

Metoda �setAttribute()�<?try{$db = new PDO("sqlite::memory:" );}catch( PDOException $e ){die( $e->getMessage() );}#$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );$stmt = $db->query( "CREATE TABLE links ( id INTEGER PRIMARY KEY, name TEXT, url TEXT);");$stmt = $db->query("INSERT INTO links VALUES (NULL,'WSZiB','http://www.wszib.edu.pl/');");$stmt = $db->query("INSERT INTO links VALUES (NULL,'AGH','http://www.agh.edu.pl/');");$stmt = $db->prepare( "SELECT * FROM links WHERE url = :url" );$url = "http://www.wszib.edu.pl/";$stmt->bindParam( ":url", $url );$stmt->execute();while( $row = $stmt->fetch() )

print_r( $row );$url = "http://www.agh.edu.pl/";$stmt->execute();while( $row = $stmt->fetch() )

print_r( $row );?>

Metoda �query()�<?try{$db = new PDO("sqlite::memory:" );}catch( PDOException $e ){die( $e->getMessage() );}#$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );$stmt = $db->query( "CREATE TABLE links ( id INTEGER PRIMARY KEY, name TEXT, url TEXT);");$stmt = $db->query("INSERT INTO links VALUES (NULL,'WSZiB','http://www.wszib.edu.pl/');");$stmt = $db->query("INSERT INTO links VALUES (NULL,'AGH','http://www.agh.edu.pl/');");$stmt = $db->prepare( "SELECT * FROM links WHERE url = :url" );$url = "http://www.wszib.edu.pl/";$stmt->bindParam( ":url", $url );$stmt->execute();while( $row = $stmt->fetch() )

print_r( $row );$url = "http://www.agh.edu.pl/";$stmt->execute();while( $row = $stmt->fetch() )

print_r( $row );?>

Page 28: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Metody �prepare()�, �bindParam()� oraz �execute()�

<?try{$db = new PDO("sqlite::memory:" );}catch( PDOException $e ){die( $e->getMessage() );}#$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );$stmt = $db->query( "CREATE TABLE links ( id INTEGER PRIMARY KEY, name TEXT, url TEXT);");$stmt = $db->query("INSERT INTO links VALUES (NULL,'WSZiB','http://www.wszib.edu.pl/');");$stmt = $db->query("INSERT INTO links VALUES (NULL,'AGH','http://www.agh.edu.pl/');");$stmt = $db->prepare( "SELECT * FROM links WHERE url = :url" );$url = "http://www.wszib.edu.pl/";$stmt->bindParam( ":url", $url );$stmt->execute();while( $row = $stmt->fetch() )

print_r( $row ); $url = "http://www.agh.edu.pl/";$stmt->execute();while( $row = $stmt->fetch() )

print_r( $row );?>

Przechowywanie obrazu w BD<?try{ $db = new PDO("sqlite::memory:"); $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $stmt = $db->query( "CREATE TABLE images(id INTEGER PRIMARY KEY,data BLOB);"); $stmt = $db->prepare(�INSERT INTO images (id, data) VALUES (NULL , ?)"); $fp=fopen('/home/http/htdocs/images/logo.png','rb'); $stmt->bindParam(1, $fp, PDO::PARAM_LOB); $db->beginTransaction(); $stmt->execute(); $db->commit(); $stmt = $db->prepare(�SELECT * FROM images"); $stmt->execute(); header("Content-type: image/png"); $row = $stmt->fetch(); print $row['data'] ;}catch( PDOException $e ) { die( $e->getMessage() ); }$db=null;?>

SQL Injection

� Inject ion (ang. wt r canie, �wstawianie, int ruzja)

�Przekazywanie ca o ci lub � �fragm entu danych wprowadzonych przez u yt kownika bezpo rednio � �(bez wcze niejszej analizy) do bazy �

�Miejsce ataku

Page 29: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Przyk adowy skrypt�$idPo czenia = pg_connect("port=5431 dbname=bank");��$zapytanie = �SELECT * FROM users WHERE login=�$_GET[login]� AND pass=�$_GET[pass]� �;$idWyniku = pg_query($idPo czenia,$zapytanie);��if(!$idWyniku) { echo "B d!!!\n";�� exit;}$lcount = pg_num_rows($idWyniku) ; if($lcount != 0) {

echo �zalogowano�;}else {

echo �b dny login lub has o�;�� �}pg_close($idPo czenia);��

Przyk ad 1�byleCologin

has o � � or �� = �

Strona WWW

SELECT * FROM users WHERE login=�byleCo� AND pass=�� or �� = ��

Zapytanie

SELECT * FROM users

równowa ne�

Przyk ad 2��;delete from users--login

has o �

Strona WWW

SELECT * FROM users WHERE login=��;delete from users-- AND pass=��

Zapytanie

SELECT * FROM users WHERE login=��;delete from users

równowa ne�

Page 30: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Sposoby obrony

� Zasada m inim um przywilejów� Sprawdzanie typu danych typu (np.

funkcje is_num eric(), ctype_digit () , . . . ) � Ewentualna konwersja (set type()),

reprezentacja l iczbowa (sprint f()) �Wstawienie sekwencji Escape

(*_escape_st ring(), ...)� Brak inform acji o st rukturze BD�Wyst puje rednik lub podwójny m inus - � �

Ignoruj zapytanie � Haszowanie

Obs uga �ciasteczek��

�Tworzenie � ciasteczka� int setcookie (st ring nazwa [ , st r ing warto ��

[ , int okresWa no ci � �[ , st ring cie ka � �

[ , st r ing dom ena [ , int

secure] ] ] ] ] )�Odbieranie � ciasteczka�

_COOKIE

�Ciasteczka� - przyk ad�

<?setcookie(�TestCookie", "1", time()+3600*3); /* wysy a cookie na komputer u ytkownika � �okres wa no ci �ciasteczka� - 3 godziny*/� �?><html>...<body><? echo $TestCookie;echo $_COOKIE["TestCookie"];?>...

Page 31: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Sesje

�session_start (void)�SID

Sesje - przyk ad �

session_start();if(!isset($_SESSION[�licznik'])){ $_SESSION[�licznik'] = 0;} else { $_SESSION[�licznik']++;}echo �Liczba odwiedzin=� . $_SESSION[�licznik'] . �<br>";?><!� je li przegl darka nie obs uguje ciasteczek - ->� � �<a href=�skrypt.php?<? echo SID; ?>">nast pna</a>�//odrejestrowanie zmiennej �licznik�//unset($_SESSION[�licznik']);

skrypt.php

Serializacja obiektów

�serialize()__sleep()

�unserialize()__wakeup()

Page 32: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Obiekty w sesjach - przyk ad�

class A { var $zmienna = 1; function wyswietl() { echo $this->zmienna; }}

include('klasa.inc');$a = new A;$s = serialize($a);session_start();$_SESSION['s']=$s;?><!-- je li browser nie obs uguje ciasteczek -->� �<a href="b.php?<? echo SID; ?>">nast pna</a>�

include('klasa.inc');session_start();$a = unserialize($_SESSION['s']);$a-> wyswietl();

a.php

b.phpklasa.inc

Wysy anie poczty�

mail ($adresat, $tytu , $wiadomo � �� [, $dodatkowe_nag ówki �[, $dodatkowe_parametry]])

�Przyk ad�$wiadomosc = <<< KONIECSerdeczne pozdrowieniaprzesy a ..�KONIEC;mail (�[email protected]�, �Pozdrowienia�, $wiadomosc);

Polskie znaki w poczcie$charset = �iso-8859-2";$to = �[email protected]';$subject = � ó w';� �$encoded_subject = "=?$charset?B?".base64_encode($subject)."?=\r\n";$message = � ó w';� �$header .= "X-Mailer: Cokolwiek\r\n";$header .= "Return-Path: [email protected]\r\n";$header .= "MIME-Version: 1.0\r\n";$header .= "From: Jan Kowalski <[email protected]>\r\n";$header .= "X-Accept-Language: pl\r\n";$header .= "Content-Type: text/plain; charset={$charset}\r\n";$header .= "Content-Transfer-Encoding: 8bit\r\n";if(!mail($to, $encoded_subject, $message, $header)) {

echo "Error: Message not sent";}else {

echo "Message sent successfully!";}

ród o: http://www.webdiary.pl/� �

Page 33: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Wysy anie za czników� �� $file = $path.$filename; $file_size = filesize($file); $handle = fopen($file, "r"); $content = fread($handle, $file_size); fclose($handle); $content = chunk_split(base64_encode($content)); $uid = md5(uniqid(time())); $name = basename($file); $header = "From: �Jan Kowalski <[email protected]>\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"; $header .= "This is a multi-part message in MIME format.\r\n"; $header .= "--".$uid."\r\n"; $header .= "Content-type:text/plain; charset=utf-8\r\n"; $header .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $header .= $message."\r\n\r\n"; #tre maila�� $header .= "--".$uid."\r\n"; $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; $header .= "Content-Transfer-Encoding: base64\r\n"; $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"; $header .= $content."\r\n\r\n"; $header .= "--".$uid."--"; mail(�[email protected]�, �Tytul�, "", $header);

ród o: http://www.finalwebsites.com/� �

Autoryzacja HTTP

if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm=�Autoryzacja� �); header('HTTP/1.0 401 Unauthorized'); echo �Naci ni to przycisk Anuluj';� � exit; } else { echo "<p>Witaj {$_SERVER['PHP_AUTH_USER']}.</p>"; echo "<p>Wprowadzi e has o{$_SERVER['PHP_AUTH_PW']}</p>";� � � }

Tworzenie dynamicznych grafik<?php # u yto opcji �--with-gd��$image = imagecreate(400, 300);$bg = imagecolorallocate($image, 0, 0, 0);$col_ellipse = imagecolorallocate($image, 255, 255, 255);$textcolor = imagecolorallocate($image, 0, 0, 255);imageellipse($image, 200, 150, 300, 200, $col_ellipse);$y=imagesy($image);$x=imagesx($image);imagestring($image, 5, $x/2, $y/2, "Hello", $textcolor);header("Content-type: image/png");imagepng($image);?>

Page 34: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Funkcja �imagecreate()�<?php # u yto opcji �--with-gd��$image = imagecreate(400, 300);$bg = imagecolorallocate($image, 0, 0, 0);$col_ellipse = imagecolorallocate($image, 255, 255, 255);$textcolor = imagecolorallocate($image, 0, 0, 255);imageellipse($image, 200, 150, 300, 200, $col_ellipse);$y=imagesy($image);$x=imagesx($image);imagestring($image, 5, $x/2, $y/2, "Hello", $textcolor);header("Content-type: image/png");imagepng($image);?>

Funkcja � im agecol oral loca te()�<?php # u yto opcji �--with-gd��$image = imagecreate(400, 300);$bg = imagecolorallocate($image, 0, 0, 0);$col_ellipse = imagecolorallocate($image, 255, 255, 255);$textcolor = imagecolorallocate($image, 0, 0, 255);imageellipse($image, 200, 150, 300, 200, $col_ellipse);$y=imagesy($image);$x=imagesx($image);imagestring($image, 5, $x/2, $y/2, "Hello", $textcolor);header("Content-type: image/png");imagepng($image);?>

Funkcja � im ag eel li ps e()�<?php # u yto opcji �--with-gd��$image = imagecreate(400, 300);$bg = imagecolorallocate($image, 0, 0, 0);$col_ellipse = imagecolorallocate($image, 255, 255, 255);$textcolor = imagecolorallocate($image, 0, 0, 255);imageellipse($image, 200, 150, 300, 200, $col_ellipse);$y=imagesy($image);$x=imagesx($image);imagestring($image, 5, $x/2, $y/2, "Hello", $textcolor);header("Content-type: image/png");imagepng($image);?>

Page 35: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Funkcje � i mag esx()� i �imagesy()� <?php # u yto opcji �--with-gd��$image = imagecreate(400, 300);$bg = imagecolorallocate($image, 0, 0, 0);$col_ellipse = imagecolorallocate($image, 255, 255, 255);$textcolor = imagecolorallocate($image, 0, 0, 255);imageellipse($image, 200, 150, 300, 200, $col_ellipse);$y=imagesy($image);$x=imagesx($image);imagestring($image, 5, $x/2, $y/2, "Hello", $textcolor);header("Content-type: image/png");imagepng($image);?>

Funkcja � im ag es tri ng ()� <?php # u yto opcji �--with-gd��$image = imagecreate(400, 300);$bg = imagecolorallocate($image, 0, 0, 0);$col_ellipse = imagecolorallocate($image, 255, 255, 255);$textcolor = imagecolorallocate($image, 0, 0, 255);imageellipse($image, 200, 150, 300, 200, $col_ellipse);$y=imagesy($image);$x=imagesx($image);imagestring($image, 5, $x/2, $y/2, "Hello", $textcolor);header("Content-type: image/png");imagepng($image);?>

Funkcja � hea der()� <?php # u yto opcji �--with-gd��$image = imagecreate(400, 300);$bg = imagecolorallocate($image, 0, 0, 0);$col_ellipse = imagecolorallocate($image, 255, 255, 255);$textcolor = imagecolorallocate($image, 0, 0, 255);imageellipse($image, 200, 150, 300, 200, $col_ellipse);$y=imagesy($image);$x=imagesx($image);imagestring($image, 5, $x/2, $y/2, "Hello", $textcolor);header("Content-type: image/png");imagepng($image);?>

Page 36: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Funkcja � im ag ep ng ()� <?php # u yto opcji �--with-gd��$image = imagecreate(400, 300);$bg = imagecolorallocate($image, 0, 0, 0);$col_ellipse = imagecolorallocate($image, 255, 255, 255);$textcolor = imagecolorallocate($image, 0, 0, 255);imageellipse($image, 200, 150, 300, 200, $col_ellipse);$y=imagesy($image);$x=imagesx($image);imagestring($image, 5, $x/2, $y/2, "Hello", $textcolor);header("Content-type: image/png");imagepng($image);?>

PHP 5 - konstruktoryclass Auto{ public $akcja;

funct ion __const ruct () { $this -> akcja = � start � ; $this -> wykonaj(); } funct ion wykonaj() { echo "Silnik " . $this -> akcja . "< br> " ; } }

PHP 5 - destruktoryclass Auto{ public $akcja;

funct ion __dest ruct () { $this -> akcja = � stop� ; $this -> wykonaj(); } funct ion wykonaj() { echo "Silnik " . $this -> akcja . "< br> " ; } }

Page 37: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

PHP 5 - klonowanieclass Komputer{

public $procesor;public $id;

funct ion __clone() {$this-> procesor = $this-> procesor;$this-> id = $this-> id+ 1;

} } $komp1 = new Komputer; $komp2 = clone $kom p1;

PHP 5 - interfejsy

interface Throwable { public funct ion getMessage();}

class MyExcept ion im plements Throwable { public funct ion getMessage() { // ... }}

PHP 5 � PPP (Private, Protected, Public)

Class MojaKlasa{private $txt = � tekst \n";

public funct ion pisz(){print � Wypisuje� . $this-> txt ;

}}$obj=new MojaKlasa();$obj->pisz(); //Wypisuje tekstprint $obj->txt; //B d��

Page 38: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

PHP 5 � klasy abstrakcyjneabstract class KlasaAbstrakcyjna { abst ract public funct ion test ();}

class Implement acjaKlasy extends KlasaAbstrakcyjna { public funct ion t est () { echo � Wywo ano Implem entacjaKlasy::test ().\n";� }}

$o = new Im plementacjaKlasy;$o-> test ();

PHP 5 � zmienne, metody statyczne

class A{ stat ic $zm iennaStatyczna = 5; public $zm ienna = 'bla bla' ; public stat ic funct ion m etodaStatyczna() { // ... }}

print A::$zm iennaStatyczna;A::metodaStatyczna();

PHP 5 � okre lanie typów klas�

funct ion pisz(NazwaKlasy $object ) { // ...}

Page 39: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

PHP 5 � elementy finalizowane

class A { final funct ion f() { // ... }}

final class A { // Definicja klasy}

// poni sza linia jest b dna� ��// class B extends A { }

PHP 5 - sta e�

class A { const st a a = � sta a";� �}

echo � A::sta a = " . A::sta a . " \n";� �

PHP 5 - wyj tki�class Kom put er { public $procesor;

public funct ion wstaw($mojprocesor) { i f ( $this -> procesor != $mojprocesor ) { throw new Except ion("Nie mam tak iego procesora." ); } else { echo � Zamontowano procesor $mojprocesor " ; } } }

$kom p = new Kom puter; $kom p -> procesor = �486';

t ry { $kom p -> wstaw(�789'); } catch (Except ion $e) { echo $e -> getMessage(); }

Page 40: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

PHP 5 � dereferencja obiektówclass Kolo { funct ion rysuj() { print � Kolo\n"; }} class Kwadrat { funct ion rysuj() { print � Kwadrat \n" ; }}

funct ion ksztalty($fig) { switch ($fig) { case � Kolo" : return new Kolo(); case � Kwadrat" : return new Kwadrat (); }}

ksztalty(� Kolo" )-> rysuj();ksztalty(� Kwadrat")-> rysuj();

PHP 5 � s owo kluczowe ��instanceof�

class Klasa { }

$a = new Klasa;

if ($a instanceof Klasa) { echo � Witaj" ;}

PHP 5 � warto domy lna �� �parametrów z referencj�

funct ion m ojaFunkcja(&$zm = null) { if ($zm= = = null) { die("$zm musi m ie warto ");� �� }}

Page 41: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

PHP 5 � funkcja �__autoload�

funct ion __autoload($nazwaKlasy) { include_once $nazwaKlasy . " .php";}

$obiekt = new Klasa;

PHP 5 � metoda �__call�class A { funct ion __call($nazwa, $param etry) { echo "Wywo a e /a m etod $nazwa" ; � � � � � } }

$obj = new A; $obj -> jakasm etoda();

PHP 5 � metoda �__get�

class A { funct ion __get($nazwa) { echo "Próbujesz uzyska dost p do zmiennej $nazwa." ; � � } }

$obj = new A; echo $obj -> zm ienna;

Page 42: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

PHP 5 � metoda �__set�

class A { funct ion __set($nazwa,$wartosc) { echo "Próbujesz przypisa $nazwa warto $wartosc." ; � �� } }

$obj = new A; $obj -> zm ienna= � aaa� ;

PHP 5 � metoda �__toString�class A{ funct ion __toString() { return � Cokolw iek" ; }}

$obj = new A;

$st r = (st ring) $obj; // wywo ywana jest __toString()�

echo $obj; // wywo ywana jest __t oString()�

PHP 5 � sta a �__METHOD__��class A { funct ion Pokaz() { echo __FILE__ . ' (' . __LINE__ . ') ' . __METHOD__; }}funct ion Test () { echo __FILE__ . '(' . __LINE__ . ' )' . __METHOD__;}

Page 43: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

PHP 5 - iteratory

class A { var $x = 1; var $y = 2;}

$obj = new A;

foreach ($obj as $nazwaWlasnosci = > $wart oscWlasnosci) { //rób co �}

PHP 5.1 � metody �__isset� oraz �__unset�

class A { private $w asno ci = array("a" => 1);� � private function __isset($nazwa){ echo "Wywo a e isset() dla w asno ci '$nazwa�� � � � � "; return isset($this->w asno ci[$nazwa]);� � } private function __unset($nazwa){ echo "Wywo a e unset() dla w asno ci '$nazwa'\n";� � � � � unset($this->w asno ci[$nazwa]);� � }}$obj=new A;var_dump(isset($obj->a)); //Wywo a e isset() dla w asno ci �a� bool(true)� � � � �var_dump(isset($obj->z)); //Wywo a e isset() dla w asno ci �z� bool(false)� � � � �unset($obj->a); //Wywo a e unset() dla w asno ci �a�� � � � � var_dump(isset($obj->a)); //Wywo a e isset() dla w asno ci �a� bool(false)� � � � �

PHP 5.1 � metoda �__set_state�class A {public $zmienna1; public $zmienna2;}$a =new A;$a->zmienna1=1;$a->zmienna2=2;var_export($a);

class B { public $zmienna1; public $zmienna2; public static function __set_state($tablica) { foreach ($tablica as $klucz => $warto )�� echo "$klucz: $warto \n";�� }}$b =new B;$b->zmienna1=1;$b->zmienna2=2;eval( var_export($b, true) . ';');

A::__set_state(array(�zmienna1� =>1,�zmienna2�=>2,))

zmienna1: 1zmienna2: 2

Page 44: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Suhosin

�Elem enty sk adowe�PatchRozszerzenie

� ród a� �ht tp://www.hardened-php.net /suhosin/

PHP 6

� Unicode� register_globals� safe_m ode� m agic_quotes� PECL� Skoki� Przest rzenie nazw� Konst ruktory � ...

PHP 5.3

�Rozszerzenia Phar, int l i sqlite3�Natywny sterownik m ysql�Metoda m agiczna � __callStat ic()��Przest rzenie nazw�Odwo ywanie si do m etod � �

statycznych (Late Stat ic Bindings) �Funkcje anonim owe� ...

Page 45: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

PHP 5.3 � metoda �__callStatic()�class MethodTest {

public function __call($name, $arguments) { echo "Calling object method '$name' "

. implode(', ', $arguments). "\n";}

public static function __callStatic($name, $arguments) {echo "Calling static method '$name' "

. implode(', ', $arguments). "\n";}

}$obj = new MethodTest;$obj->runTest('in object context'); #Wynik: Calling object method 'runTest' in object contextMethodTest::runTest('in static context'); #Wynik: Calling static method 'runTest' in static context

PHP 5.3 � przestrzenie nazw

namespace MyProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }

}namespace { // global code

session_start();$a = MyProject\connect();echo MyProject\Connection::start();

}

PHP 5.3- Late Static Bindings

class A {public static function who() {

echo __CLASS__; }

public static function test() {self::who(); #Wynik: Astatic::who(); #Wynik: B

}}class B extends A {

public static function who() { echo __CLASS__;

}}B::test();

Page 46: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

PHP 5.3 � funkcje anonimowe

echo preg_replace_callback('~-([a-z])~', function ($match) {return strtoupper($match[1]);

}, 'hello-world');// Wynik: helloWorld

Optymalizacja aplikacji internetowej

� Optym alizacja dost pu do bazy danych�� Optym alizacja kodu PHP� Optym alizacja st ruktury baz danych i

zapyta SQL�� Cachowanie wyników zapyta do bazy �

danych� Ustatecznianie dynam icznych st ron

WWW� Optym alizacja kodu HTML

Optymalizacja dost pu do BD�

�Ciasteczka�Sesje

//sprawdzanie czy u ytkownik poda prawid owy login i has o� � � �...if(!$znaleziono_uzytkownika) { header('Location: bledne_dane.php'); // strona z b dem logowania��}else { session_start(); //uruchomienie mechanizmu sesji PRZED dodaniem danych $dane = mysql_fetch_row($wynik); // pobranie danych do tablicy $_SESSION['imie'] = $dane['imie']; $_SESSION['nazwisko'] = $dane['nazwisko']; $_SESSION['email'] = $dane['email']; mysql_close(); header('Location: witaj_uzytkowniku.php');}

Page 47: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Optymalizacja kodu PHP

Nieoptym alnie Optym alnie$liczba+ + + + $liczbaprint () echo()in_array(� audi� ,$sam ochody)

isset ($sam ochody[ �Audi� ] )

include(� plik.php� ); include(� ./plik.php� );

Optymalizacja kodu PHP c.d.

Nieoptymalne Optymalneif (st r len($zm ienna)< = 5) { echo "Wpisz przynajm niej 6 znaków"; }

if (! isset($zmienna{ 5} )) { echo "Wpisz przynajm niej 6 znaków"; }

if ($ liczba= = 1) { echo 'Jeden'; } elseif ($l iczba= = 2) { echo 'Dwa'; } elseif ($l iczba= = 3) { echo 'Trzy'; } else { echo 'Inna liczba ni 1-4' ; } �

switch ($liczba) { case "1" : echo � Jeden� ; break; case "2" : echo � Dwa� ; break; case "3" : echo � Trzy� ; break; default :}

Optymalizacja logicznej struktury BD

�Ograniczenie rozm iaru pól�Odpowiednie i pot rzebne indeksy�Tabele o sta ej d ugo ci danych� � ��Rozdzielenie z o onych tabel na � �

m niejsze�Norm alizacja?

Page 48: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Mechanizmy optymalizacyjne wbudowane w silnik

�OPTIM IZE TABLE test ; �SELECT BENCHM ARK(10000000,

(SELECT 2^ NOW()));�EXPLAIN SELECT * FROM odbiorcy

WHERE id> 1

Dobre praktyki programistyczne

� INSERT DELAYED INTO tabela(pole) VALUES(warto )��

�SELECT im ie FROM nazwiska WHERE nazwisko IN ($nazw)

� INSERT INTO tabela(im ie,nazwisko) VALUES(� Jan� ,� Kowalski� ), (� Jan� ,� Bielecki� )

Cachowanie wyników zapyta�

�SHOW STATUS LIKE 'Qcache%'; �SET SESSION query_cache_type =

�XXXX�; �Metody specjalist yczne

W asna m etoda�Zapisywanie do oddzielnych plików

Page 49: J zyk PHP - carme.pld-linux.orgcarme.pld-linux.org/~evil/varia/informatyka/semestr_5/internet_i_jego_zastosowanie/...Typy zmiennych Logiczny (boolean) Ca kowity (integer) Rzeczywisty

Ustatecznianie dynamicznych stron

�Cache Lite�Dynam iczne tworzenie statycznych

st ron

Optymalizacja kodu HTML

�Zastosowanie CSS�Kom presja kodu wynikowego

ród a �

�Rados aw Maciaszek, � SQLit e � �nowa alt ernatywa dla baz danych MySQL i PostgreSQL� , ht tp://m aciaszek.pl/phpcon/download/sqlite.pdf

�Podr cznik PHP, �ht tp://www.php.net /m anual/ M. Bit t ner, � Aplikacje int ernetowe

wysokiej wydajno ci��