kermek iwa 10

51
Izgradnja Web aplikacija Izgradnja Web aplikacija Prof. dr.sc. Dragutin Kermek Sveučilište u Zagrebu Fakultet organizacije i informatike Pavlinska 2, Varaždin 42000 [email protected] 10. dio Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin 2 Izgradnja Web aplikacija - FOI Uvod u programiranje na strani poslužitelja/CGI. Programski jezik PHP. Izvršavanje obrade (pretraživanje, zapis podataka i sl.) na strani poslužitelja. Slanje e-mail poruke. Generiranje HTML stranica. Ponovno korištenje koda. Objektna orijentacija. Rad s datumom i vremenom. Korištenje i administriranje baze podataka (MySQL). Realizacija autentikacije i autorizacije korisnika. Programiranje na strani poslužitelja

Upload: vale2712

Post on 25-Oct-2015

67 views

Category:

Documents


0 download

DESCRIPTION

owa

TRANSCRIPT

Page 1: Kermek IWA 10

Izgradnja Web aplikacijaIzgradnja Web aplikacija

Prof. dr.sc. Dragutin KermekSveučilište u Zagrebu

Fakultet organizacije i informatike

Pavlinska 2, Varaždin 42000

[email protected]

10. dio

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin2Izgradnja Web aplikacija - FOI

Uvod u programiranje na strani poslužitelja/CGI.

Programski jezik PHP.

Izvršavanje obrade (pretraživanje, zapis podataka i sl.) na strani

poslužitelja.

Slanje e-mail poruke. Generiranje HTML stranica.

Ponovno korištenje koda.

Objektna orijentacija. Rad s datumom i vremenom.

Korištenje i administriranje baze podataka (MySQL).

Realizacija autentikacije i autorizacije korisnika.

Programiranje na strani poslužitelja

Page 2: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin3Izgradnja Web aplikacija - FOI

Što je PHP

PHP je skriptni jezik za programiranje na strani poslužitelja. Za njegovo izvođenje potreban je Web poslužitelj (Apache, IIS i dr.) s ugrađenom instalacijom PHP modula ili kao CGI binary.

Kratica: “PHP: Hypertext Preprocessor”

Sintaksa PHP sliči jezicima: C, Java i Perl.

PHP programski kod ugrađuje se u tekst HTML dokumenta.

Svaki programski jezik određen je svojom sintaksom.

Bogatstvo programskog jezika izražava se brojem i raznolikošću biblioteka funkcija ili klasa koje stoje na raspolaganju (besplatno ili se kupuje).

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin4Izgradnja Web aplikacija - FOI

Što može PHP

� Sve što i bilo koji drugi CGI program Preuzimati podatke iz formi Generirati dinamičke web stranice Slati i primati cookie Rad sa bazama podataka (Adabas D, Dbase, FrontBase, Solid,

Empress, mSQL, Sybase, FilePro (read-only), Direct MS-SQL, Velocis, IBM DB2, MySQL, Unix dbm, Informix, ODBC, Ingres, Oracle)

Podržava i druge protokole: IMAP, SNMP, NNTP, POP3, HTTP, LDAP

Moguće je korištenje XML (SAX i DOM standardi su podržani) za Web servise, RSS

Generiranje PDF i drugih formata

Page 3: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin5Izgradnja Web aplikacija - FOI

Što je potrebno za PHP

Konfigurira

se

Konfigurira

se

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin6Izgradnja Web aplikacija - FOI

Povijest PHP-a

Autor: Rasmus Lerdorf, jesen 1994

Prva verzija koja je bila dostupna za korištenje izašla je negdje početkom 1995 pod imenom “Personal Home Page Tools”.

Krajem 1996 odprilike 15,000 web mjesta je koristilo PHP, a sredinom 1997 više od 50,000. Krajem 1999 procjenjeno je da više od 1,000,000 web mjesta koristi PHP.

Page 4: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin7Izgradnja Web aplikacija - FOI

PHP primjer

<html>

<head>

<title>Example</title>

</head>

<body> <?php echo "Opa, ovo je PHP!"; ?> </body>

</html>

Korisnik nakon izvođenja prima čisti HTML<html><head><title>PHP - Primjer 01</title></head><body> Opa, ovo je PHP! </body></html>

Primjer01 – Ispis poruke

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin8Izgradnja Web aplikacija - FOI

Sintaksa jezika

Instrukcije su odvojene kao u jezicima C i Perl (točka-zarez):

<?php echo "1. način"; ?> ILI<?php

echo " 2. način ";

?>

Primjer02 – Ispis poruka

Page 5: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin9Izgradnja Web aplikacija - FOI

Sintaksa jezika / 1.

Izlazak iz HTML-a i ulaz u “PHP kod”.Postoje nekoliko načina prijelaza iz HTMLa u PHP:

1. <?php echo(“1. način \n"); ?>

2. <? echo (“2. način \n"); ?> - ovisi o konfiguraciji PHP-a

Primjer03 – Sintaksa

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin10Izgradnja Web aplikacija - FOI

Sintaksa jezika / 2.

Naziv varijable počinje znakom $. Kasnije slijedi detaljnije o varijablama.

Postoji razlika između jednostrukih i dvostrukih navodnika!Jednostruki navodnici doslovno prikazuju tekst dok dvostruki provode zamjenu varijable s njenom vrijednošću.

$a = 1;$b = 7;

<? echo "$a + $b " . ($a + $b) . "\n"; ?> <br><? echo '$a + $b ' . ($a + $b) . '\n'; ?> <br>

Primjer04 – Primjena navodnika

Page 6: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin11Izgradnja Web aplikacija - FOI

Komentari

Php koristi ‘C’, ‘C++’ i ‘Unix shell’ tipove komentara.

<?php

echo "Ovo je komentar"; // c++ komentar

?>

<br>

<?php

/* višelinijski

komentar u stilu C-a */

echo "Ovo je kraj komentara"; # unix shell komentar

?>

Nije dozvoljeno ugnjezditi višelinijske komentare npr./* ovo je u redu /* ovo nije u redu */ */

Primjer05 – Komentari

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin12Izgradnja Web aplikacija - FOI

Tipovi podataka

PHP podržava sljedeće tipove podataka:» Arrays - niz» Floating-point numbers – decimalni brojevi» Integer - cjelobrojni» Object - objekt» String - znakovni

Page 7: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin13Izgradnja Web aplikacija - FOI

Integer

Integer možemo specificirati na jedan od sljedećih načina:$a = 1234; # decimalni broj

$a = -123; # negativan broj

$a = 0123; # oktalni broj (83 decimalno)

$a = 0x12; # heksadecimalni broj (18 decimalno)

Veličina integer-a zavisi od platforme na kojoj se izvodi PHP, iako je obično 32-bitan.

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin14Izgradnja Web aplikacija - FOI

Floating point – decimalni tip

Sintaksa:

$a = 1.234;

$a = 1.2e3;

Page 8: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin15Izgradnja Web aplikacija - FOI

Polja/nizovi

Nizovi se u PHPu ponašaju: kao hash tablice odnosno asocijativni nizovi i kao vektori odnosno indeksirani nizovi

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin16Izgradnja Web aplikacija - FOI

Jednodimenzionalni nizovi

Niz možemo kreirati koristeći list() i array() funkcije ili možeme eksplicitno pridružiti vrijednost svakom elementu niza

$a[0] = "abc"; $a[1] = "def"; $b["foo"] = 13;

Možemo koristiti i prazne zagrade pa će element biti automatski dodan na kraj zagrade

$a[] = "hello"; // $a[2] == "hello"

$a[] = "world"; // $a[3] == "world"

Page 9: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin17Izgradnja Web aplikacija - FOI

Jednodimenzionalni nizovi / 1.

Funkcije za sortiranje nizova:asort() – sortira niz i održava redoslijed pridruživanjaarsort() – sortira niz u obrnutom redoslijedu i zadržava redoslijed

pridruživanjaksort() – sortira niz po ključursort() – sortira niz u obrnutom redoslijedu (od najvećeg prema

najmanjemsort() – sortira niz od najmanjeg prema najvećem elementuuasort(), usort(), uksort() - sortiraju nizove po funkcijama koje im se

zadaju

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin18Izgradnja Web aplikacija - FOI

Višedimenzionalni nizovi / 1.

Za svaku novu dimenziju dodamo novi [indeks] ili [ključ].

$a[1][0] = $f; # dvodmenzionalni niz

$a["foo"][2] = $f; # ( možemo miješati numeričke i)

$a[3]["bar"] = $f; # ( asocijativne ključeve)

$a["foo"][4]["bar"][0] = $f; # četiri dimenzionalni niz!

Višedimenzionalne nizove ne možemo direktno referencirati unutra stringova

echo “Ovo neće raditi: $a[3][bar]";

echo " Ovo hoće raditi : " . $a[3][bar]; // PHP3

echo " Ovo hoće raditi : {$a[3][bar]}"; // PHP4

Page 10: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin19Izgradnja Web aplikacija - FOI

Višedimenzionalni nizovi / 2.

Nizove možemo puniti na slijedeće načine:Prvi način:$a["color"] = "red";

$a["taste"] = "sweet";

$a["name"] = "apple";

$a[3] = 4;

Drugi način:$a = array( "color" => "red",

"taste" => "sweet",

"name" => "apple",

3 => 4 );

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin20Izgradnja Web aplikacija - FOI

Višedimenzionalni nizovi / 3.

Funkcija array()može biti ugnježđena kod višedimenzionalnih nizova:

<? $a = array(

"more" => array("boja" => "plava", "okus" => "slano"),

"jezero" => array("boja" => "zelena", "okus" => "slatko"),

"bara" => array( "boja" => "smeđa", "okus" => "bljutavo"));

echo $a["more"]["boja"]; ?>

Primjer06 – Višedimenzionalni nizovi

Page 11: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin21Izgradnja Web aplikacija - FOI

Objekti

Da bi instancirali klasu (kreirali njen objekt) u varijablu koristi se new:

<?php

class proba {

function probaj() {

echo "Probam.";

}

}

$bar = new proba;

$bar->probaj();

?>

Primjer07 – Objekti

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin22Izgradnja Web aplikacija - FOI

Rukovanje tipovima podataka

PHP, kao i drugi skriptni jezici, ne zahtjeva deklariranje tipa podatka. Postupak se provodi automatski:

$foo = "0"; // $foo je string (ASCII 48)

$foo++; // $foo je string "1" (ASCII 49)

$foo += 1; // $foo je integer (2)

$foo = $foo + 1.3; // $foo sada je double (3.3)

$foo = 5 + "10 Little Piggies"; // $foo je integer (15)

$foo = 5 + "10 Small Pigs"; // $foo je integer (15)

$foo = 5 + "Small Pigs"; // $foo je integer (5)

$foo = "Small Pigs" + 5; // $foo je integer (5)

$foo = 5 . "Small Pigs"; // $foo je string ("5Small Pigs")

$foo = "Small Pigs" . 5; // $foo je string ("Small Pigs5")

Primjer08 – Tipovi podataka

Page 12: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin23Izgradnja Web aplikacija - FOI

Rukovanje tipovima podataka / 1.

Još malo primjera:

$foo = 1 + "10.5"; // $foo is double (11.5)

$foo = 1 + "-1.3e3"; // $foo is double (-1299)

$foo = 1 + "bob-1.3e3"; // $foo is integer (1)

$foo = 1 + "bob3"; // $foo is integer (1)

$foo = 1 + "10 Small Pigs"; // $foo is integer (11)

$foo = 1 + "10 Little Piggies"; // $foo is integer (11)

$foo = 1 + "10.7 Small Pigs"; // $foo is double (11.7)

$foo = 1 + "10.7 Little Piggies"; // $foo is double (11.7)

$foo = "10.7 pigs " + 1; // $foo is double (11.7)

$foo = "10.7 pigs " + 1.0; // $foo is double (11.7)

Primjer09 – Rukovanje tipovima podataka

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin24Izgradnja Web aplikacija - FOI

Pretvaranje tipova podataka

Ako se strogo želi koristiti određeni tip podataka to se čini funkcijomint settype (string var, string type)

Pretvara varijablu ‘var’ u tip podataka ‘type’, koji može imati sljedeće vrijednosti:

“integer“, ”double“,

“string“, “array“, “object"

Funkcija vraća ‘true’ ako je promjena uspješna u suprotnom vraća ‘false’.Suprotno radi funkcija: string gettype (mixed var)

Page 13: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin25Izgradnja Web aplikacija - FOI

Pretvaranje tipova podataka / 1.

<?

$foo = 1 + "10.5"; // $foo is double (11.5)

print $foo . " " . gettype($foo) . "<br>";

settype($foo, "string");

print $foo . " " . gettype($foo) . "<br>";

settype($foo, "int");

print $foo . " " . gettype($foo) . "<br>";

?>

Primjer10 – Pretvaranje tipova podataka

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin26Izgradnja Web aplikacija - FOI

Testiranje tipa podatka

Ako se strogo želi ispitati određeni tip podataka to se čini funkcijomis_array()

is_double(), is_float(), is_real()

is_long, is_int(), is_integer()

is_string()

is_object()

Page 14: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin27Izgradnja Web aplikacija - FOI

Testiranje tipa podatka / 1.

<?

$foo = 10.5;

echo "int? " . is_int($foo) . "<br>";

echo "double? " . is_double($foo) . "<br>";

echo "string? " . is_string($foo) . "<br>";

?>

Primjer10_1 – Testiranje tipa podatka

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin28Izgradnja Web aplikacija - FOI

Testiranje statusa varijable

Provjera postojanja varijable, njeno brisanje i imali li vrijednost:isset() - postoji liunset() - brisanjeempty() - nema pridruženu vrijednost – prazna "" (prazan string)

0 (0 kao broj)

"0" (0 kao string)

NULL

FALSE

array() (prazno polje)

var $var; (deklarirana varijabla bez vrijednosti)

Page 15: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin29Izgradnja Web aplikacija - FOI

Testiranje statusa varijable / 1.

<?

echo "postoji? " . isset($foo) . "<br>";

$foo = 10.5;

echo "postoji? " . isset($foo) . "<br>";

unset($foo);

echo "postoji? " . isset($foo) . "<br>";

echo "sadrzaj? " . empty($foo) . "<br>";

?>

Primjer10_2 – Testiranje statusa varijable

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin30Izgradnja Web aplikacija - FOI

String

Označavamo ih navodnicima. Ako koristimo obične navodnike ( " ) varijable unutar stringa će biti zamijenjene pravim vrijednostima. Drugi način za označavanje stringova su jednostruki navodnici ( '). Unutar jednostrukih navodnika varijable se ne zamjenjuju svojim vrijednostima. Za specijalne znakove koristi se \ (backslash):

Slijed Značenje\n linefeed (LF or 0x0A in ASCII)\r carriage return (CR or 0x0D in ASCII)\t horizontal tab (HT or 0x09 in ASCII)\\ backslash\$ dollar sign\“ double-quote\[0-7]{1,3} znak u oktalnaj notaciji \x[0-9A-Fa-f]{1,2} znak u heksadecimalnoj notaciji

Page 16: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin31Izgradnja Web aplikacija - FOI

String / 1.

<?php

$str = "Ovo je string";

$str = $str . " sa još malo nadodanog teksta.";

$str .= " I još malo teksta \n";

print $str . "<br>";

$num = 9;

$str = "Broj: $num<br>"; // 'Broj: 9<br>'

print $str;

$num = 9;

$str = 'Broj: $num<br>'; // 'Broj: $num<br>'

print $str;

$str = 'Ovo je test.';

print $str . "<br>";

$first = $str[0]; // Uzimanje prvog

$last = $str[strlen($str)-1]; // i zadnjeg znaka

print $first . " " . $last;

?>

Primjer11 – String

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin32Izgradnja Web aplikacija - FOI

String u više redova

Još jedan način je korištenje (<<<) oznake:

<?php

$str = <<<EOD

iza 3 znaka manje koristimo oznaku

kojom označavamo

početak i kraj stringa.

EOD;

?>

Primjer12 – String u više redova

Page 17: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin33Izgradnja Web aplikacija - FOI

Varijable

Imena varijabli se mogu kreirati po sljedećem pravilu:$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

<?php

$foo = 'Bob'; // Pridružujemo vrijednost 'Bob'echo $foo . "<br>";$bar = &$foo; // Referenciramo $foo preko $bar.$bar = "Pero"; // Mijenjamo $bar i $foo je promijenjen.echo $foo . "<br>"; // 'Pero 'echo $bar . "<br>"; // 'Pero '$bar = "Moje ime je $bar"; echo $foo . "<br>"; // 'Moje ime je Pero '

?>

Primjer13 – Varijable

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin34Izgradnja Web aplikacija - FOI

Unaprijed definirane varijable

U PHP-u postoji veliki broj unaprijed definiranih varijabli.Sljedeće varijable vezane su uz Apache server

Varijabla Opis

SERVER_NAME naziv servera

REQUEST_METHOD koja metoda je korištena za pristup stranici; npr. 'GET', 'HEAD', 'POST', 'PUT‘

SCRIPT_NAME sadrži put do skripte koja se trenutno izvršava

REMOTE_ADDR IP korisnika koji gleda stranicu

SERVER_PROTOCOL ime i revizija protokola preko kojeg je dan zahtjev za stranicom npr. HTTP/1.0

Page 18: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin35Izgradnja Web aplikacija - FOI

Unaprijed definirane varijable / 1.

-Varijabla Opis

argv niz argumenata proslijeđenih skripti

argc ako je skripta pozvana iz komandne linije

PHP_SELF ime skripte koja se izvrašava

HTTP_COOKIE_VARS asocijativni niz varijabli proslijeđenih skripti preko HTTP cookie-ja

HTTP_GET_VARS asocijativni niz varijabli proslijeđenih skripti preko HTTP GET metode

HTTP_POST_VARS asocijativni niz varijabli proslijeđenih skripti preko HTTP POST metode

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin36Izgradnja Web aplikacija - FOI

Konstante

Konstante definiramo sa define() funkcijom. UPHPu postoje i predefinirane konstante:

TRUE - istinaFALSE - laž__FILE__ - ime skripte __LINE__ - linija u skripti

PHP_VERSION PHP_OSE_ERROR E_WARNINGE_PARSE E_NOTICEE_ALL

Page 19: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin37Izgradnja Web aplikacija - FOI

Konstante / 1.

Primjer za definiciju konstante:

<?php

define("CONSTANT", "Hello world.");

echo CONSTANT;

?>

Primjer15 – Konstante

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin38Izgradnja Web aplikacija - FOI

Konstante kontrole programa

Primjer za __FILE__ i __LINE__ :

<?php

print "Ovo je: " . __FILE__ . " u liniji broj: " . __LINE__;

?>

Primjer16 – Konstante kontrole programa

Page 20: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin39Izgradnja Web aplikacija - FOI

Operatori

U PHP-u postoje sljedeće vrste operatora:1. Aritmetičke operatore2. Operatore pridruživanja3. Operatore uspoređevanja4. Operatore na razini bitova5. Operatore za kontrolu grešaka6. Operatore izvršavanja7. Operatore za povećavanje i smanjivanje8. Logičke operatore9. Operatore za rad sa stringovima

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin40Izgradnja Web aplikacija - FOI

Aritmetički operatori

+, -, /, *, %, ++, --

Page 21: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin41Izgradnja Web aplikacija - FOI

Operatori uspoređivanja

Primjer Naziv Rezultat

$a == $b Jednako True ako je $a jdnak $b.$a === $b Identično True ako je $a jednak $b i istog su tipa. $a != $b Nije jednako True ako $a nije jednak $b.$a !== $b Nije jedinično True ako $a nije jednak $b ili nisu istog

tipa.$a < $b Manji od True ako je $a strogo manji od $b.

$a > $b Veći od True ako je $a strogo veći od $b.

$a <= $b Manji ili jednak True ako je $a manje ili jednako $b.

$a >= $b Veći ili jednak True ako je $a veći ili jednak $b.

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin42Izgradnja Web aplikacija - FOI

Logički operatori

Primjer Naziv Rezulat

$a and $b I True ako su $a i $b true.$a or $b Ili True ako je ili $a ili $b true.$a xor $b Eks. ili True ako je ili $a ili $b true,

ali ne oba.! $a Ne True ako $a nije true.$a && $b I True ako su $a i $b true.$a || $b Ili True ako je ili $a ili $b true.

Page 22: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin43Izgradnja Web aplikacija - FOI

Operatori tipa

PHP podržava samo jedan operatora tipa, a to je:instanceof instanca klase

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin44Izgradnja Web aplikacija - FOI

String operatori

PHP podržava samo dva string operatora, a to su:. Operator spajanja stringova

.= Operator pridruživanja stringova

Page 23: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin45Izgradnja Web aplikacija - FOI

if instrukcija

<?php

$a = 1;

$b = 2;

print ‘$a=‘ . $a . ‘, $b=‘ . $b . "<br>";

if ($a > $b) {

print "a > b";

}

elseif ($a == $b){

print "a == b";

}

else {

print "a < b";

}

?>

Primjer17 – if instrukcija

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin46Izgradnja Web aplikacija - FOI

switch instrukcija

<?php

$i = 1;

switch ($i) {

case 0: print "i = 0"; break;

case 1: print "i = 1"; break;

case 2: print "i = 2"; break;

}

?>

Primjer18 – switch instrukcija

Page 24: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin47Izgradnja Web aplikacija - FOI

while instrukcija

<?php

$a = 0;

$b = 10;

while ($a < $b) {

print "$a <br>";

$a++;

}

do {

print "$a <br>";

$a--;

} while ($a > 0);

?>

Primjer19 – while, do-while instrukcija

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin48Izgradnja Web aplikacija - FOI

for instrukcija

<?php

for ($i=0;$i < 10;$i++) {

print "$i <br>";

if($i == 7)

break;

}

?>

Primjer20 – for instrukcija

Page 25: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin49Izgradnja Web aplikacija - FOI

foreach instrukcija

<?php

$arr = array('jedan', 'dva', 'tri');

foreach ($arr as $i)

{

echo "$i<br>\n";

}

?>

Primjer21 – foreach instrukcija

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin50Izgradnja Web aplikacija - FOI

foreach instrukcija / 1.

<?php

$arr['jedan'] = 1;

$arr['dva'] = 2;

$arr['tri'] = 3;

foreach ($arr as $k => $vr)

{

echo "$k=$vr<br>\n";

}

?>

Primjer22 – foreach instrukcija

Page 26: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin51Izgradnja Web aplikacija - FOI

Funkcije

Funkcije možemo definirati na slijedeći način:�Bez argumenata:function foo() {

...}

�S argumentima:function foo ($arg_1, $arg_2, ..., $arg_n) {

...}

�S pretpostavljenim vrijednostima argumenata:function foo ($arg_1 = pretpostavljena vrijednost) {

...}

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin52Izgradnja Web aplikacija - FOI

Funkcije / 1.

<?phpsquare(4);

function square ($num) { echo $num * $num; }?>

Primjer23 – Funkcije

Page 27: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin53Izgradnja Web aplikacija - FOI

Funkcije / 2.

<?phpsquare(); // nema argument

function square ($num) { echo $num * $num; }?>

Primjer23_1 – Funkcije

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin54Izgradnja Web aplikacija - FOI

Funkcije / 3.

<?phpsquare(); // nema argumentecho "<br>";square(3);

function square ($num = 7) { echo $num * $num; }?>

Primjer23_2 – Funkcije

Page 28: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin55Izgradnja Web aplikacija - FOI

Funkcije / 4.Kod funkcije kojima nisu definirani argumenati:function foo() {

...

} broj argumenata i same argumente možemo dobiti preko posebnih funkcija:func_num_args() // broj argumenatafunc_get_arg() // preuzimanje argumenta

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin56Izgradnja Web aplikacija - FOI

Funkcije / 5.

<?php

foo(1, 2, 3);

function foo()

{

$numargs = func_num_args();

echo "Broj argumenata: $numargs<br>\n";

if ($numargs >= 2)

{

echo "2. argument je: " . func_get_arg(1) . "<br>\n";

}

}

?>

Primjer23_3 – Funkcije

Page 29: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin57Izgradnja Web aplikacija - FOI

Vraćena vrijednost funkcije

Funkcije mogu vraćati:Vrijednost:function square ($num) { return $num * $num; }

Niz:function small_numbers() { return array (0, 1, 2); }

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin58Izgradnja Web aplikacija - FOI

Vraćena vrijednost funkcije / 1.

<?php$a = 10;echo "a=" . $a . " 4**2=" . square (4) . "<br>";$b = small_numbers();foreach ($b as $i) { echo $i . "<br>"; }

function square ($num) { return $num * $num; }function small_numbers() { return array (0, 1, 2); }?>

Primjer24 – Vraćene vrijednosti funkcije

Page 30: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin59Izgradnja Web aplikacija - FOI

Vraćena vrijednost funkcije / 2.

<?phplist ($zero, $one, $two) = small_numbers();echo $zero . " " . $one . " " . $two . "<br>";

function small_numbers() { return array (0, 1, 2); }?>

funkciom list(...) varijablama iz liste argumenata pridružuju se korespondirajuće vrijednosti niza. Skraćuje se postupak jer zamjenjuje veći broj pridruživanja prema indesiranim pozicijama iz niza.

Primjer24_1 – Vraćene vrijednosti funkcije

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin60Izgradnja Web aplikacija - FOI

Vidljivost varijabli

U PHP-u postoje 4 vrste vidljivosti varijabli:1. Ugrađene superglobalne varijable koje su vidljive bilo gdje u

skripti2. Globalne varijable definirane u skripti vidljive su kroz cijelu

skriptu ali ne u funkcijama3. Varijable definirane u funkcijama su lokalne varijable funkcije4. Varijable definirane u funkcijama kao globalne odnose se na

globalne varijable istog imena

Page 31: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin61Izgradnja Web aplikacija - FOI

Vidljivost varijabli / 1.

Superglobalne varijable (njihov popis je u $GLOBALS):<?php

foreach($GLOBALS as $k => $vr) {

echo $k . "<br>";

}

?>

Primjer26 – Vidljivost varijabli

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin62Izgradnja Web aplikacija - FOI

Vidljivost varijabli / 2.

<?php$a = 1;echo "a=" . $a . "<br>";foo();

function foo(){

echo "foo: a=" . $a . "<br>"; // varijaba a nije definirana$a = 2;echo "foo: a=" . $a . "<br>";

}

echo "a=" . $a . "<br>";?>

Primjer26_1 – Vidljivost varijabli

Page 32: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin63Izgradnja Web aplikacija - FOI

Vidljivost varijabli / 3.

<?php

$a = 1;

echo "a=" . $a . "<br>";

foo();

echo "a=" . $a . "<br>";

function foo()

{

global $a;

echo "foo: a=" . $a . "<br>";

$a = 2;

echo "foo: a=" . $a . "<br>";

}

?>

Primjer27 – Vidljivost varijabli

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin64Izgradnja Web aplikacija - FOI

CGI varijable okoline

Variable Name ValueDOCUMENT_ROOT korijenski direktorij na poslužiteljuHTTP_COOKIE kolačići koje je postavio korisnikHTTP_HOST naziv računalaHTTP_REFERER URL stranice koja je pozvala skriptuHTTP_USER_AGENT tip korisnikovog preglednikaHTTPS "on" ako je skripta zvana preko sigurnog poslužiteljaPATH putanja na kojoj je izvršen poslužitelj QUERY_STRING lista parametara (kod GET poziva)REMOTE_ADDR IP adresa korisnikaREMOTE_HOST naziv računala korisnika (ako se može dobiti) ili IP adresaREMOTE_PORT port preko kojeg je korisnik povezan na poslužiteljREMOTE_USER korisničko ime (ako je stranica zaštićena putem poslužiteljaREQUEST_METHOD GET ili POSTREQUEST_URI putanja do zahtjevanog dokumenta ili skripte (relativno do korijenskog direktorija dokumenta) SCRIPT_FILENAME puni naziv važećeg sktipteSCRIPT_NAME putanja do važeće skripte (relativno do korijenskog direktorija dokumenta)

Page 33: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin65Izgradnja Web aplikacija - FOI

CGI varijable okoline / 1.

Variable Name ValueSERVER_ADMIN email adres webmasteraSERVER_NAME puno ime poslužiteljaSERVER_PORT port kojeg prisluškuje poslužiteljSERVER_SOFTWARE software koji se koristi na poslužitelju (npr Apache/2.0.52)

WWW poslužitelj automatski postavlja asocijativni niz

$HTTP_SERVER_VARS za svaki CGI – stara verzija php < 4.1.0

$_SERVER za svaki CGI – nova verzija 4.1.0.

Platforma određuje koje su varijable okoline.

netstat –a da vidimo koji su na otvoreni portovi

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin66Izgradnja Web aplikacija - FOI

CGI varijable okoline / 2.

<?phpforeach ($_SERVER as $k => $vr)

{echo "$k=$vr<br>\n";}

?>

Primjer28 – CGI varijable okoline

Page 34: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin67Izgradnja Web aplikacija - FOI

Prijenos podataka iz formulara - GET

Za prijenos podataka iz formulara također se koristi varijabla okoline QUERY_STRING u koju su upisani podaci svih kontrola iz formulara. Skripta

sama obrađuje tu varijablu ali sada je jednostavnije jer se zna format po kojem

su upisani podaci. NIJE sigurna metoda slanja podataka jer se podaci šalju kao

dio URL-a! U PHP-u postoji asocijativni niz $HTTP_GET_VARS, a u novim

verzijama $_GET koji sadrži podatke.

<head></head><body>

<form id="form1" method="get" name="form1" action="primjer29.php"><p><label for="ime">Ime: </label><input name="ime" size="20"><br><label for="prezime">Prezime: </label><input name="prezime" size="20"><br><input id="submit1" name="submit1" type="submit" value="Šalji"><input id="reset1" name="reset1" type="reset" value="Obriši"> </p></form>

</body></html>

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin68Izgradnja Web aplikacija - FOI

Prijenos podataka iz formulara - GET / 1.

<?phpforeach ($HTTP_GET_VARS as $k => $vr)

{echo "$k=$vr<br>\n";}

?>

Primjer29 – Prijenos podataka metodom GET

Page 35: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin69Izgradnja Web aplikacija - FOI

Prijenos podataka iz formulara - POST

Za prijenos podataka iz formulara koristi se standardni ulaz. Skripta čita

podatke sa standardnog ulaza i puni varijable (obično tip hash) podacima iz

formulara. Sigurnija metoda slanja podataka od GET.

<html><head></head><body>

<form id="form1" method="post" name="form1" action="primjer30.php"><p><label for="ime">Ime: </label><input name="ime" size="20" /><br /><label for="prezime">Prezime: </label><input name="prezime" size="20" /><br /><input id="submit1" name="submit1" type="submit" value="Šalji" /><input id="reset1" name="reset1" type="reset" value="Obriši" /> </p></form>

</body></html>

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin70Izgradnja Web aplikacija - FOI

Prijenos podataka iz formulara - POST / 1.

WWW poslužitelj provodi određeno pretvaranje nekih znakova:

•alfanumeričke prenosi bez promjene•praznine pratvara u +•ostale znakove pretvara u oblik %HH gdje je HHASCII kod znaka u bazi 16.

To znači da CGI skripta treba provesti vraćanje u izvorni oblik.

U PHP-u postoji asocijativni niz $HTTP_POST_VARS, a u novim verzijama

$_POST koji sadrži podatke.

Page 36: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin71Izgradnja Web aplikacija - FOI

Prijenos podataka iz formulara - POST / 2.

<?phpforeach ($_POST as $k => $vr){

echo "$k=$vr<br>\n";}?>

Primjer30 – Prijenos podataka metodom POSTPrimjer30 – Prijenos podataka metodom POST

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin72Izgradnja Web aplikacija - FOI

Prijenos podataka iz formulara

Prijenos podataka iz formulara različit je za pojedine vrste kontrole kao što su

checkbox, radio button i sl. kada se koriste u grupi.

<form id="form1" method="post" name="form1" action="primjer30.php"><p>Odaberi omiljeni programski jezik: <br /><input type="checkbox" name="p_jezik1" value="1" /> C/C++<br /><input type="checkbox" name="p_jezik2" value="1" /> Basic<br /><input type="checkbox" name="p_jezik3" value="1" checked="checked" /> PHP<br /><input type="checkbox" name="p_jezik4" value="1" /> Java<br /><input type="checkbox" name="p_jezik5" value="1" />C#<br /><input type="submit" value="Šalji" /> <input type="reset" value="Obriši" /></p>

</form>

Primjer30_1 – Prijenos podataka iz formulara

Page 37: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin73Izgradnja Web aplikacija - FOI

Prijenos podataka iz formulara

Prijenos podataka iz formulara različit je za pojedine vrste kontrole kao što su

checkbox, radio button i sl. kada se koriste u grupi.

<form id="form1" method="post" name="form1" action="primjer30.php"><p>Odaberi omiljeni programski jezik: <br /><input type="checkbox" name="p_jezik" value="1" /> C/C++<br /><input type="checkbox" name="p_jezik" value="2" /> Basic<br /><input type="checkbox" name="p_jezik" value="3" checked="checked" /> PHP<br /><input type="checkbox" name="p_jezik" value=“4" /> Java<br /><input type="checkbox" name="p_jezik" value="5" />C#<br /><input type="submit" value=" Šalji " /> <input type="reset" value=" Obriši " /></p>

</form>

Primjer30_2 – Prijenos podataka iz formulara

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin74Izgradnja Web aplikacija - FOI

Prijenos podataka iz formulara

Prijenos podataka iz formulara različit je za pojedine vrste kontrole kao što su

checkbox, radio button i sl. kada se koriste u grupi.

<form id="form1" method="post" name="form1" action="primjer30.php"><p>Odaberi omiljeni programski jezik: <br /><input type="radio" name="p_jezik1" value="1" /> C/C++<br /><input type="radio" name="p_jezik2" value="1" /> Basic<br /><input type="radio" name="p_jezik3" value="1" checked="checked" /> PHP<br /><input type="radio" name="p_jezik4" value="1" /> Java<br /><input type="radio" name="p_jezik5" value="1" />C#<br /><input type="submit" value="Šalji" /> <input type="reset" value="Obriši" /> </p>

</form>

Primjer30_3 – Prijenos podataka iz formulara

Page 38: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin75Izgradnja Web aplikacija - FOI

Prijenos podataka iz formulara

Prijenos podataka iz formulara različit je za pojedine vrste kontrole kao što su

checkbox, radio button i sl. kada se koriste u grupi.

<form id="form1" method="post" name="form1" action="primjer30.php"><p>Odaberi omiljeni programski jezik: <br /><input type="radio" name="p_jezik" value="1" /> C/C++<br /><input type=“radio" name="p_jezik" value="2" /> Basic<br /><input type=“radio" name="p_jezik" value="3" checked="checked" /> PHP<br /><input type=“radio" name="p_jezik" value=“4" /> Java<br /><input type=“radio" name="p_jezik" value="5" />C#<br /><input type="submit" value=" Šalji " /> <input type="reset" value=" Obriši " /></p>

</form>

Primjer30_4 – Prijenos podataka iz formulara

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin76Izgradnja Web aplikacija - FOI

Rad s datotekama

Aplikacijska logika najčešče traži da WWW poslužitelj pohranjuje i čita

podatke iz datoteke (razne postavke npr. vezanu uz pristup do baze podataka,

aktivnost pojedinih modula i sl.). Danas se sve više koristi zapis u XML formatu.

Postoje glavne funkcije:•fopen - otvaranje

•fclose - zatvaranje

•fread - čitanje

• file - učitavanje u polje

• fwrite - upisivanje

•flock - zaključavanje

•fseek - pozicioniranje

Page 39: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin77Izgradnja Web aplikacija - FOI

Otvaranje datoteke

Datoteka može biti otvorena za jednu ili više vrsta operacija:

$fp = fopen ("podaci.txt", "r"); - čitanje

$fp = fopen ("podaci.txt", "w+"); - upisivanje tj. prepisivanje

$fp = fopen ("podaci.txt", “a+"); ----dodavanje na kraj

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin78Izgradnja Web aplikacija - FOI

Otvaranje datoteke / 1.

<form id="form1" method="post" name="form1" action="primjer31.php"><p><label for="ime">Ime: </label><input name="ime" size="20" /><br /><label for="prezime">Prezime: </label><input name="prezime" size="20" /><br /><input id="submit1" name="submit1" type="submit" value="Šalji" /><input id="reset1" name="reset1" type="reset" value="Obriši" /> </p>

</form>

Page 40: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin79Izgradnja Web aplikacija - FOI

Otvaranje datoteke / 2.

<?php$ime = $_POST["ime"];$prezime = $_POST["prezime"];$fp = fopen ("podaci/ADRESAR.TXT", "a+");fwrite ($fp, $ime);fwrite ($fp, " | ");fwrite ($fp, $prezime);fwrite ($fp, "\n");fclose ($fp);?>

Primjer31 – Otvaranje datoteke

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin80Izgradnja Web aplikacija - FOI

Čitanje datoteke

Datoteka se može čitati:

•zapis po zapis ili

•cijela.

<?php$fn = "podaci/ADRESAR.TXT";$fp = fopen ($fn, "r");$contents = fread ($fp, filesize ($fn));fclose ($fp);echo $contents;?>

čitanje svih znakova u

string $contents

Primjer32 – Čitanje datoteke

Page 41: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin81Izgradnja Web aplikacija - FOI

Čitanje datoteke / 1.

Datoteka se može čitati:

•zapis po zapis ili

•cijela.

<?php$fn = "podaci/ADRESAR.TXT";$fcontents = file ($fn);while (list ($line_num, $line) = each ($fcontents)) {

echo "<b>Line $line_num:</b> " . htmlspecialchars ($line) . "<br>\n";}?>

čitanje zapisa u

polje $fcontents

Primjer33 – Čitanje datoteke

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin82Izgradnja Web aplikacija - FOI

Upisivanje u datoteku

<?php$ime = $_POST["ime"];$prezime = $_POST["prezime"];$fp = fopen ("podaci/ADRESAR.TXT", "a+");fwrite ($fp, $ime);fwrite ($fp, " | ");fwrite ($fp, $prezime);fwrite ($fp, "\n");fclose ($fp);?>

Primjer31 – Upisivanje u datoteku

Page 42: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin83Izgradnja Web aplikacija - FOI

Zatvaranje datoteke

<?php$ime = $_POST["ime"];$prezime = $_POST["prezime"];$fp = fopen ("podaci/ADRESAR.TXT", "a+");fwrite ($fp, $ime);fwrite ($fp, " | ");fwrite ($fp, $prezime);fwrite ($fp, "\n");fclose ($fp);?>

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin84Izgradnja Web aplikacija - FOI

Zaključavanje datoteke

Simultano korištenje datototeke od strane 2 ili više skripata koji može dovesti do

nekonzistentnosti podataka datoteke ukoliko se ne ograniči pristup samo jednoj

skripti u datom vremenu. To znači da ostale skripte trebaju čekati dok prva ne

završi svoj rad s datotekom. Zaključavanje datoteke biti će pouzdano rješenje

samo u slučaju kada sve skripte traže zaključavanje datoteke. Ukoliko jedna

skripta ne koristi taj princip nego direktno pristupa podacima, cijeli koncept

gubi smisao jer u slučaju paralelnog rada neće postojati mehanizam

međusobnog isključivanja. Ovisi o operacijskom sustavu!

Funkcija zaključavanje ima sintaksu:flock(broj_veze_datoteke, operacija);

Uglavnom se koriste dvije operacije zaključavanja:

•ekskluzivno zaključavanje (LOCK_EX )

•otključavanje ranijeg zaključavanja (LOCK_UN )

Page 43: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin85Izgradnja Web aplikacija - FOI

Pozicioniranje u datoteci

Kod otvaranja datoteke važeće pozicija datoteke je njen početak. Moguće je

realizirati datoteku sa zapisima fiksne duljine kod koje je moguće ažuriranje

podataka. Za to je potrebno postaviti važeću poziciju u datoteci na početak

zapisa koji se ažurira i nakon toga provesti zapis podataka.

Drugi slučaj kod kojeg je potrebno primjeniti pozicioniranje u datoteci odnosi

se na zaključavanje datoteke. Kod poziva zaključavanja datoteke može se čekati

dok druga skripta ne završi svoj posao, a ona može promijeniti neke podatke u

datoteci kao npr. dodati novi zapis(e). Ako se dodaje na kraj datoteke potrebno

je postaviti važeću poziciju u datoteci na njen novi kraj. Ovisi o operacijskom

sustavu!

Funkcija pozicioniranja u datoteci ima sintaksu:fseek (fseek (fseek (fseek (broj_veze_datoteke, pomak, [, [, [, [, odakleodakleodakleodakle])])])]);;;;Pomak je broj bajtova, a odakle može biti:

SEEK_SET – početak datoteke

SEEK_CUR - važeća pozicija u datoteci

SEEK_END - kraj datoteke.

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin86Izgradnja Web aplikacija - FOI

Obrada pogreške u radu s datotekama

Rad s datotekama temelji se na određenim pretpostavkama koje mogu biti ispunjenje, ali

i ne. Različiti utjecaji uvjetuju da pretpostavke mogu biti pogrešne zbog čega bi

izvršavanje skripte krenulo u neželjenom smjeru.

Kao primjer može poslužiti otvaranje datoteke za čitanje koja ne postoji ili nisu ispravno

podešena prava za tu operaciju, otvaranje datoteke za upisivanje kada nije dozvoljeno

upisivanje, izvršavanje operacije koja nije u skladu s modom otvaranja datoteke i sl.

PHP u slučaju pojavljivanja pogreške u nekoj liniji nastavlja sa sljedećom kao da nije

došlo do pogreške.

Potrebno je uključiti obradu pogrešaka kod većine U/I operacija s datotekama.Za obradu pogreške U/I funkcija povezuje se operatorom or s funkcijom za obradu

pogreške.

Kada U/I funkcija završi s kodom neuspješnosti tada se aktivira funkcija za obradu

pogreške.

U/I_funkcija(...) or funkcija_za_obradu_pogreske(...);

Page 44: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin87Izgradnja Web aplikacija - FOI

Obrada pogreške / 1.

<?php$fn = "podaci/ADRESAR.TXT.1";$fcontents = file ($fn) or pogreska("Problem kod otvaranja: $fn");while (list ($line_num, $line) = each ($fcontents)) {

echo "<b>Line $line_num:</b> " . htmlspecialchars ($line) . "<br>\n";}

function pogreska($poruka){

echo "$poruka \n";exit;

}?>

Primjer34 – Obrada pogreške

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin88Izgradnja Web aplikacija - FOI

Razina izvještaja o pogreškama / 1.

int error_reporting ( [int level] )

Funkcijom error_reporting može se postaviti ili utvrditi važeća razina

izvještavanja o pogreškama u skriptama.

Pretpostavljena razina izvještavanja postavljena je varijablom error_reporting u konfiguracijskoj datoteci PHP-a – php.ini

Page 45: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin89Izgradnja Web aplikacija - FOI

Razina izvještaja o pogreškama / 2.

<?phpif($_SERVER["REQUEST_METHOD"] != "GET") {echo "Samo za GET metodu!";exit;

}if(! isset($_GET["vrsta"])) {$vrsta = 99;

} else {$vrsta = $_GET["vrsta"];

}

echo "Postojeća razina: " . error_reporting() . "<br>";

switch ($vrsta) {case 0: $razina = E_ALL; break;case 1: $razina = E_ALL ^ E_NOTICE; break;case 2: $razina = E_ERROR | E_WARNING | E_PARSE | E_NOTICE; break;

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin90Izgradnja Web aplikacija - FOI

Razina izvještaja o pogreškama / 3.

case 3: $razina = E_ERROR | E_WARNING | E_PARSE; break;case 4: $razina = E_ERROR | E_WARNING; break;case 5: $razina = E_ERROR; break;default: $razina = 0; break;

}

error_reporting($razina);

echo "Postavljena razina: " . error_reporting() . "<br>";

echo $varijabla;echo 3/0;?>

Primjer01 – Razina izvještaja o pogreškama

Page 46: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin91Izgradnja Web aplikacija - FOI

Rukovanje s pogreškama / 1.

mixed set_error_handler ( callback error_handler [, int error_types] )

Funkcijom set_error_handler može se preusmjeriti izvržavanje skripte na

definiranu funkciju za rukovanje s pogreškama u slučaju određene razine

pogreške u skriptama.

Pretpostavljena razina izvještavanja postavljena je varijablom error_reporting

u konfiguracijskoj datoteci PHP-a – php.ini

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin92Izgradnja Web aplikacija - FOI

Rukovanje s pogreškama / 2.

Funkcija za rukovanje s pogreškama ima sljedeći format:handler ( int errno, string errstr [, string errfile [, int errline [, array errcontext]]] )

errno – razina pogreška koja se desila

errstr – poruka pogreške

errfile – naziv datoteke u kojoj se desila pogreška

errline – broj linije u kojoj se desila pogreška

errcontext – vektor varijabli koje postoje u pogledu dešavanja pogreške.

NE smiju se mijenjati!

Page 47: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin93Izgradnja Web aplikacija - FOI

Rukovanje s pogreškama / 3.

function obradaPogresaka($errno, $errstr, $errfile, $errline, $errcontext) {echo "Desila se pogreška kod izvršavanja!<br>";echo "Datoteka: $errfile<br>";echo "Linija: $errline<br>";echo "Opis: $errstr<br>";echo "Kod: $errno<br>";exit;

}

if($_SERVER["REQUEST_METHOD"] != "GET") {echo "Samo za GET metodu!";exit;

}if(! isset($_GET["vrsta"])) {$vrsta = 99;

} else {$vrsta = $_GET["vrsta"];

}

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin94Izgradnja Web aplikacija - FOI

Rukovanje s pogreškama / 3.

switch ($vrsta) {case 0: $razina = E_ALL;break;case 1: $razina = E_ALL ^ E_NOTICE;break;case 2: $razina = E_ERROR | E_WARNING | E_PARSE | E_NOTICE;break;case 3: $razina = E_ERROR | E_WARNING | E_PARSE;break;case 4: $razina = E_ERROR | E_WARNING;break;case 5: $razina = E_ERROR;break;default: $razina = 0;break;

}

error_reporting($razina);

echo "Postavljena razina: " . error_reporting() . "<br>";

Page 48: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin95Izgradnja Web aplikacija - FOI

Rukovanje s pogreškama / 3.

set_error_handler(obradaPogresaka);

echo $varijabla;echo 3/0;

Primjer02 – Rukovanje s pogreškama

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin96Izgradnja Web aplikacija - FOI

Ignoriranje pogrešaka / 1.

Operatorom @ može se ignorirati pogreška u izrazu koji slijedi operator

<?php

@$varijabla = 3/0;

?>

Primjer03 – Ignoriranje pogrešaka

Page 49: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin97Izgradnja Web aplikacija - FOI

Generiranje pogrešaka / 1.

bool trigger_error( string error_msg [, int error_type] )

Funkcijom trigger_error može se generirati pogreška željene poruke i

razine te preusmjeriti izvržavanje skripte na postavljenog rukovatelja

pogrešaka.

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin98Izgradnja Web aplikacija - FOI

Generiranje pogrešaka / 2.

if($_SERVER["REQUEST_METHOD"] != "GET") {echo "Samo za GET metodu!";exit;

}if(! isset($_GET["a"])) {$a = 5;

} else {$a = $_GET["a"];

}if(! isset($_GET["b"])) {$b = 1;

} else {$b = $_GET["b"];

}if($b == 0) {trigger_error("Djeljenje s nulom!", E_USER_ERROR);

}echo "Rezultat: " . $a / $b;

Primjer04 – Generiranje pogrešaka

Page 50: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin99Izgradnja Web aplikacija - FOI

Evidencija pogrešaka / 1.

bool error_log ( string message [, int message_type [, string

destination [, string extra_headers]]]

Funkcijom error_log može se evidentirati pogreška u dnevniku web

poslužitelja, poslati na TCP port ili u datoteku.

Vrste:

0 – poruka se šalje PHP sistemskom dnevniku

1 – poruka se šalje kao email na adresu

2 - poruka se šalje na vezu PHP debugera

3 – poruka se dodaje na kraj datoteke

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin100Izgradnja Web aplikacija - FOI

Evidencija pogrešaka / 2.if($_SERVER["REQUEST_METHOD"] != "GET") {echo "Samo za GET metodu!";exit;

}if(! isset($_GET["a"])) {$a = 5;

} else {$a = $_GET["a"];

}if(! isset($_GET["b"])) {$b = 1;

} else {$b = $_GET["b"];

}if($b == 0) {error_log("Djeljenje s nulom!");error_log("Djeljenje s nulom!", 3, "dnevnik_pogresaka.txt");exit;

}echo "Rezultat: " . $a / $b

Primjer05 – Evidencija pogrešaka

Page 51: Kermek IWA 10

Prof.dr.sc. D.Kermek, Fakultet organizacije i informatike, Varaždin101Izgradnja Web aplikacija - FOI

Korištena i dodatna literatura

� http://www.php.net/

� http://www.php.org/

� http://perl.about.com/library/phpCR/bl_index.htm?PM=ss14_perl

� http://linuxdocs.org/HOWTOs/PHP-HOWTO.html

� http://www.php.net/manual/en/install.apache2.php

� http://www.thesitewizard.com/archive/phpvscgi.shtml

� http://www.thesitewizard.com/archive/feedbackphp.shtml

� http://php.resourceindex.com/Documentation/

� http://phpmyadmin.sourceforge.net/

� http://www.oreilly.com/catalog/phpckbk/chapter/ch08.pdf

� http://www.oreilly.com/catalog/progphp/chapter/ch05.html

� http://www.devshed.com/Server_Side/PHP