programiranje za internet 2

26
1 Programiranje za Internet 2 Web hosting, PHP Ak. god. 2007/2008 2 PHP PHP je skriptni jezik koji se uglavnom koristi na web serveru za generiranje dinamičkih web stranica, mada se PHP interpreter može koristiti i u ljuski (shellu). Putem ljuske se ostvaruje interakcija korisnika s kernelom Unix-like (Unix sličnih) operacijskih sustava. Poziv php interpretera u shellu: • Poziv php interpretera preko stranice http://www.fesb.hr/~kiki/primjeri_internet_2/boja_pozadine.php

Upload: francisco

Post on 13-Apr-2016

30 views

Category:

Documents


1 download

DESCRIPTION

Sadrzi razne teze u vezi programiranja za internet....

TRANSCRIPT

Page 1: Programiranje Za Internet 2

1

Programiranje za Internet 2

Web hosting, PHP

Ak. god. 2007/2008

2

PHP� PHP je skriptni jezik koji se uglavnom koristi na web serveru

za generiranje dinamičkih web stranica, mada se PHP interpreter može koristiti i u ljuski (shellu).

� Putem ljuske se ostvaruje interakcija korisnika s kernelomUnix-like (Unix sličnih) operacijskih sustava.

� Poziv php interpretera u shellu:

• Poziv php interpretera preko stranice http://www.fesb.hr/~kiki/primjeri_internet_2/boja_pozadine.php

Page 2: Programiranje Za Internet 2

2

3

PHP

� PHP stranice se mogu pisati u bilo kojem tekstualnom editoru jer su to po svom formatu obične tekstualne datoteke.

� Program Edit plus je dobar editor jer ima ugrađenu podršku za PHP.

� Postoji i komercijalni IDE za PHP koji se zove ZendStudio.

� PHP kôd se kombinira s HTML kodom tj. to je tzv. umetnuti jezik (embedded language) kao i ASP (Active Server Pages), SSI (Server-Side Includes), JSP (Java Server Pages).

4Izgled prozora Zend studija

Page 3: Programiranje Za Internet 2

3

5

Interpreter ↔ Kompajler

� Interpreter prevodi i izvodi jednu po jednu liniju koda

� Kompajler prevede cijeli kôd koji se nakon prevođenja može izvesti

� Granični slučajevi – Java i .NET (CLR)

� Java kôd se prevodi u Java bajt kôd (Java bytecode) koji onda interpretira JVM ili kompajlira JIT kompajler

� .NET kôd se prevodi u kôd koji se onda izvodi opet unutar .NET virtualnog stroja (CLR ) koji interpretira kôd u strojni

6

PHP

� Nakon izrade PHP stranice ta se stranica pohranjuje na web serveru.

� Za izvršenje PHP stranice potrebno je da web server ima instaliran PHP interpreter.

� Većina web hosting pružatelja usluga (provider) pruža podršku za PHP.

� Web hosting servis je tip Internet hostingservisa koji pojedincima i organizacijama omogućava postavljanje web stranica.

Page 4: Programiranje Za Internet 2

4

7

Web hosting� Web host-ovi tj. web host pružatelji usluga su kompanije koje

pružaju svojim korisnicima prostor na web serveru za postavljanje njihovih stranica.

� Često ISP (Internet Service Provider) pružatelji usluga nude i web hosting. ISP pružatelji usluga omogućavaju korisnicima spajanje na Internet (HT, VIP, Iskon, Carnet,….).

� Najosnoviji web hosting omogućava postavljanje statičkih web stranica koje se obično na server prebacuju FTP-om.

� Ovakva web hosting usluga je obično dostatna samo za osobne web stranice (personal web pages).

� Kompleksni web site-ovi zahtijevaju od pružatelja usluga podršku za baze podataka i platforme za razvoja web aplikacija poput PHP-a, ASP.NET-a i Jave.

� Izvor: www.wikipedia.org

8

Web hosting� Često je potrebna i podrška za SSL odnosno noviju verziju

SSL-a TLS (Transport Layer Security) ako web aplikacija zahtijeva zaštitu podataka (npr. on-line kupovina).

� Znači složeniji web hosting uključuje i dodatne funkcionalnosti pored postavljanja web stranica.

� Često se klijentu omogućava pristup i administriranje svih tih funkcionalnosti (npr. dodavanje baze, dodavanje poddomena i sl.) preko Web sučelja. Npr. cpanel, webmin, …

� Odabir web hostinga ovisi o zahtjevima klijenta (baza, operacijski sustav, aplikacijski softver). Češće se nudi Linux-based web hosting sa tipičnom tzv. LAMP platformom Linux, Apache, MySQL i PHP/Perl/Python.

� Neki hrvatski web hosting pružatelji usluga:www.orbis.hr, www.avalon.hr, http://www.inside.hr, http://www.posluh.hr.

Page 5: Programiranje Za Internet 2

5

9

Web hosting

Izvor: http://news.netcraft.com/archives/web_server_survey.html

10

Web hosting

� Koliko prostora na disku trebate?

� Mali i srednje veliki site treba između 10 i 100MB diskovnog prostora.

� Veličina obične HTML stranice može biti i ispod 1KB, ali je veličina slika koje se nalaze gotovo na svakoj stranici znatno veća.

� Stoga HTML stranica zauzima između 5 i 50KB, ovisno o korištenju slika i drugih elemenata (video, zvuk, i sl.) koji zauzimaju diskovni prostor.

� Izvor: http://www.w3schools.com

Page 6: Programiranje Za Internet 2

6

11

Web hosting� Koliki mjesečni promet trebate zakupiti? � Mali i srednje veliki site ima mjesečni promet od 1GB do 5GB.� Promet se može dobiti množenjem prosječne veličine stranice s

očekivanim brojem pristupa stranicama. Npr. ako je prosječna veličina stranice 30KB i očekivani mjesečni broj posjeta je 50,000 promet će biti 0.03MB x 50,000 = 1.5GB.

� Pri izboru web hostinga treba voditi računa o:� Pored već navedenog (izbor platforme)� O ograničenju mjesečnog prometa� O troškovima prekoračenja mjesečnog prometa i diskovnog

prostora� Podršci� i ….

� Izvor: http://www.w3schools.com

12

PHP� PHP se može integrirati s različitim web serverima

npr. Apache, IIS, ….� PHP interpreter će izvršiti sve stranice čije

ekstenzije su u konfiguracijskim datotekama web servera postavljene kao PHP ekstenzije (obično php, php3, ali to se može postaviti u konfiguraciji web servera).

� Neovisan je o platformi (Linux, Windows, …).� Može se vezivati na vanjske komponente kao što su

Java Beans i Win32 COM.� PHP je open source. Instalacijske verzije i izvorni

kod možete dobaviti sa adrese http://www.php.net/downloads.php.

� Trenutno aktualne verzije su 5.2.1 i PHP 4.4.6

Page 7: Programiranje Za Internet 2

7

13

PHP tagovi

� PHP kôd se umeće (embedded language) između početne i krajnje specijalne oznake tj. taga.

� Kada PHP parser (analizator, gramatički analizator, raščlanjivač sintakse) parsira PHP datoteku, traži početne i krajnje tagove i koristi samo dio koji se nalazi između tih tagova.

� Zbog toga je moguće PHP kôd ubacivati u različite tipove dokumenata jer se sve što je izvan PHP tagova jednostavno ignorira.

� Najčešće se PHP kôd umeće u HTML dokument.

14

PHP tagovi

1. <?php ?>2. <script language="php"> </script>3. <? ?>4. <% %>

� Prvi i drugi tagovi su uvijek na raspolaganju. Skraćeni tagovi (3) su na raspolaganju samo ako je PHP konfiguriran s tom opcijom (--enable-short-tags). ASP stil tagova (4) je na raspolaganju ako je PHP konfiguriran na taj način.

� Ako niste sigurni u opcije instaliranog PHP-a najbolje je koristiti prvi stil tagova.

Page 8: Programiranje Za Internet 2

8

15

Komentari

� PHP podržava komentare u stilu C-a, C++ i u stilu Unix ljuske (Perl stil). :

<?php

echo 'This is a test'; // This is a one-line c++ style comment

/* This is a multi line comment

yet another line of comment */

echo 'This is yet another test';

echo 'One Final Test'; # This is a one-line shell-style comment

?>

16

Tipovi podataka

� PHP podržava četiri skalarna tipa podataka (boolean ,integer, float, string); dva složena tipa (array ,object) i dva specijalna tipa (resource, NULL).

� Pretvaranje tipova podataka moguće je korištenjem castoperatora:

� (int), (integer) - cast to integer

� (bool), (boolean) - cast to boolean

� (float), (double), (real) - cast to float

� (string) - cast to string

� (array) - cast to array

� (object) - cast to object

� I korištenjem funkcije settype:

� bool settype ( mixed &var, string type )

Page 9: Programiranje Za Internet 2

9

17

Tipovi podataka

� <?php$a_bool = TRUE; // a boolean$a_str = "foo"; // a string$a_str2 = 'foo'; // a string$an_int = 12; // an integer

echo gettype($a_bool); // prints out: booleanecho gettype($a_str); // prints out: string

// If this is an integer, increment it by fourif (is_int($an_int)) {

$an_int += 4;}

// If $bool is a string, print it out// (does not print out anything)if (is_string($a_bool)) {

echo "String: $a_bool";}?>

18

Tipovi podataka� Konverzija varijable u boolean može dati rezultat na koji niste navikli u drugim

programskim jezicima: � <?php

var_dump((bool) ""); // bool(false)var_dump((bool) 1); // bool(true)var_dump((bool) -2); // bool(true)var_dump((bool) "foo"); // bool(true)var_dump((bool) 2.3e5); // bool(true)var_dump((bool) array(12)); // bool(true)var_dump((bool) array()); // bool(false)var_dump((bool) "false"); // bool(true)?>

� Negativni broj se tretira kao TRUE! � Funkcija var_dump prikazuje podatke o izrazu uključujući tip i vrijednost.

void var_dump ( mixed expression [, mixed expression [, ...]] )

� Funkcija print_r prikazuje podatke o izrazu (vrijednost) u obliku prilagođenom za čitanje (npr. ispisati će čitav niz vrijednosti iz niza)bool print_r ( mixed $expression [, bool $return] )

http://www.fesb.hr/~kiki/primjeri_internet_2/tipovi_podataka.php

Page 10: Programiranje Za Internet 2

10

19

Tipovi podataka� String je niz karaktera. Karakter je u PHP-u bajt tj. PHP nema izvornu

podršku za Unicode. � Ali imate funkciju (string utf8_encode ( string data )) koje vam omogućavaju

pretvaranje stringa bajtova u Unicode string.� String se može definirati na tri načina:

1. $a='Ovo je string u jednostrukim navodnicima';2. $a="Ovo je string u dvostrukim navodnicima";3. Korištenjem heredoc sintakse. Nakon znaka <<< treba staviti nekakav

identifikator, nakon kojeg ide novi red pa string pa na kraju stringa isti identifikator kao na početku. Identifikator definirate sami uz poštivanje PHP konvencija imenovanja (smje sadržavati samo alfanumeričke karaktere i underscores, i mora počinjati sa slovom ili underscore-om): $a= <<<EODOvo je stringnapisan korištenjemheredoc sintakse u više linija.EOD;

http://www.fesb.hr/~kiki/primjeri_internet_2/stringovi.php

20

Tipovi podataka� PHP niz je uređena mapa (ordered map). Mapa je struktura

podataka koja mapira vrijednosti prema ključevima.

� Hash tablica ili hash mapa je jedna implementacija uređene mape kod koje se ključ korištenjem hash funkcije pretvara u hash vrijednost tj. indeks na kojem se nalazi tražena vrijednost.

� PHP niz se može koristiti za pohranu “običnog” niza, liste, hash tablice, kolekcije, stoga, reda i sl.

� Niz se kreira korištenjem naredbe array(). Argumenti su parovi ključ=>vrijednost međusobno odvojeni zarezom.

array( key => value , ... )

� Ključ može biti integer ili string, a vrijednost može biti bilo što.

Page 11: Programiranje Za Internet 2

11

21

Tipovi podataka<?

$arr = array("foo" => "bar", 12 => true);echo $arr["foo"]; // barecho $arr[12]; // 1// Create a simple array.$array = array(1, 2, 3, 4, 5);print_r($array);// Now delete every item, but leave the array itself intact:foreach ($array as $i => $value) {

unset($array[$i]);}print_r($array);// Append an item (note that the new key is 5, instead of 0 as you might expect).$array[] = 6;print_r($array);// Re-index:$array = array_values($array);$array[] = 7;print_r($array);

?>

http://www.fesb.hr/~kiki/primjeri_internet_2/nizovi.php

22

Foreach naredba

� Naredba se koristi isključivo za dohvaćanje elemenata niza. Podržana su dva tipa sintakse:

foreach (array_expression as $value) statement

foreach (array_expression as $key => $value) statement

� Prvi oblik će proći kroz niz definiran u array_expression. U svakom koraku vrijednost elementa niza na kojem se petlja trenutno nalazi smješta se u $value, a petlja se pomiče na sljedeći element niza.

� Drugi oblik ima istu funkcionalnost osim što se još u varijablu $key dodaje i vrijednost ključa.

http://www.fesb.hr/~kiki/primjeri_internet_2/prforeache.php

Page 12: Programiranje Za Internet 2

12

23

Kontrola toka� if ; else; elseif;

alternativna sintaksa:if(): ... endif;while; do..while; for; break; continue; switch; require; include

� PRIMJER:

� if($s>1)printf(“Vrijednost je veća od jedan\n”);

elseprintf(“Vrijednost nije veća od jedan\n”);

http://www.fesb.hr/~kiki/primjeri_internet_2/kontrolatoka.php

24

Uključivanje drugih datoteka

� Uključivanje druge datoteke u skriptu koja se izvodi:

include(ime datoteke), require(ime datoteke),

include_once(ime datoteke), require_once(ime datoteke) – osiguravaju ukoliko je datoteka već uključena da se ne uključi dva puta

� Funkcije require i include se razlikuju u obradi greške. Ukoliko navedena datoteka ne postoji require će zaustaviti daljnje izvođenje skripte, a include neće.

Page 13: Programiranje Za Internet 2

13

25

Operatori

� Aritmetički:� $a + $b , $a - $b, $a * $b, $a / $b, $a % $b

� Logički:� $a and $b, $a or $b, $a xor $b, ! $a, $a && $b, $a || $b

� String:� .operator konkatenacije dva stringa� $a = "Hello "; $b = $a . "World!"; // rezultat $b = "Hello World!"

� Uspoređivanja:� $a == $b, $a != $b, $a < $b, $a > $b, $a <= $b, $a >= $b

� Na razini bita:� $a & $b, $a | $b, $a ^ $b, ~ $a, $a << $b, $a >> $b

26

Operator @

� PHP podržava operator kontrole greške (error control operator) koji se označava se @. Kada se taj znak doda ispred izraza sve greške koji bi taj izraz generirao prilikom izvođenja se ignoriraju tj. php interpreter ih ne generira što je zgodno ukoliko želite da se greške ne prikažu korisniku kada pristupi skripti.

� Operator kontrole greške "@" trenutno onemogućava i kritične greške koje bi dovele do prestanka izvođenja skripte. Npr. ako se ovaj operator koristi uz poziv funkcije sve greške koje je generirala funkcija će se izostaviti.

$a = @(4/0); // Skripta neće generirati grešku u ovoj liniji

http://laris1.fesb.hr/operator_greske.php

� Ukoliko je u interpreteru postavljena opcija track_errors greške će se pohranjivati u varijabli $php_errormsg tako da ih možete obraditi.

Page 14: Programiranje Za Internet 2

14

27

Funkcije

� Sintaksa definicije funkcije:function moja($arg1,$arg2,….,$argn){

echo “Primjer funkcije.\n";return $retval;

}

� Funkcija treba biti definirana prije no što je se može koristiti. Povratna vrijednost iz funkcije se vraća sa ključnom riječi return. Varijable se u funkciju mogu prenositi i preko reference ako je potrebno u funkciji mijenjati vrijednost prenesene varijable.

function add_some_extra(&$string) {

$string .= ‘dodaj ovo.'; }$str = ‘Ovo je string, ';add_some_extra($str);echo $str; // izlaz ‘Ovo je string, dodaj ovo.'

28

Funkcije

� Funkcija create_function stvara funkciju na osnovu prenesenih parametara i kao povratnu vrijednost vraća ime stvorene funkcije.

string create_function ( string $args, string $code )

� Parametri se obično prenose kao stringovi delimitirani jednostrukim navodnicima.� args – argumenti koje će funkcija imati� code – kôd funkcije koja se kreira

http://www.fesb.hr/~kiki/primjeri_internet_2/funkcije.php

Page 15: Programiranje Za Internet 2

15

29

Klase

� Definicija klase (tek od verzije PHP 3.0) počinje sa ključnom riječi class nakon koje ide ime klase. Klasa je omeđena vitičastim zagradama.

� Mogućnost pristupa članovima klase određuje se ključnim riječimapublic, protected ili private (samo kod PHP 5.x.x, kod ostalih verzija pristup članovima klase je isključivo public i ne mogu se navoditi modifikatori pristupa (istog značenja kao u C++) – najjednostavnije je provjeriti postavke PHP pomoću funkcije phpinfo() -http://laris1.fesb.hr/svojstva_php.php). Ukoliko nije definiran način pristupa metodi klase PHP podrazumijeva public način.

� Za kreiranje objekta koristi se naredba new.

� Varijabla $this sadrži referencu na instancu objekta s kojom se u tom trenutku radi.

30

Klase

class foo{

function do_foo () {

echo "Doing foo."; } var $varijabla = “vrijednost”; //kod verzija PHP 4.x.x treba se

//koristiti ključna riječ var za deklaraciju //podatkovnih članova klase

}

$bar = new foo; $bar -> do_foo (); $bar -> varijabla;

pathname separator

Page 16: Programiranje Za Internet 2

16

31

Klase (samo kod verzija PHP 5.x.x)

� Ako je član klase deklariran sa ključnom riječi static može mu se pristupiti bez instanciranjaklase.

� Statičkom podatkovnom članu ne može se pristupiti preko instance klase (objektu), statičkoj metodi može.

� Unutar statičke metode ne može se koristiti $this.

http://laris1.fesb.hr/static_kljucna_rijec.php

32

Klase

� Klasa može naslijediti metode i članove druge klase koristeći ključnu riječ extends u deklaraciji klase.

� Višestruko nasljeđivanje nije dozvoljeno.

� Naslijeđene metode i članovi mogu se prepisati (override), ukoliko nisu definirane s ključnom riječi final (samo kod PHP 5.x.x).Ukoliko je cijela klasa definirana s ključnom riječi final ta se klasa ne može naslijediti.

� Pristup prepisanim elementima osnovne klase radi se preko operatora dosega (::) i ključne riječi parenttj. parent::

Page 17: Programiranje Za Internet 2

17

33

Klase

class SimpleClass{

// member declarationvar $var = 'a default value';// method declarationfunction displayVar() {

echo $this->var;}

}class ExtendClass extends SimpleClass

{// Redefine the parent methodfunction displayVar(){

echo "Extending class\n";parent::displayVar();

}}

http://www.fesb.hr/~kiki/primjeri_internet_2/klasa_nasljed.php

34

Klase

� Preopterećenje (overload) metoda i članova klase radi se preko metoda __call, __get i __set (samo kod PHP 5.x.x). Te se metode pozivaju ukoliko objekt ne sadrži metodu kojoj se pristupa.

� Preopterećene metode ne smiju biti definirane kao static, a od PHP 5.0.x moraju biti definirane kao public.

� Parametar $name je ime člana klase koji se postavlja ili dohvaća. Metoda __set() u parametru $value sadrži vrijednost koja će se postaviti u varijablu s imenom $name.

� Metode se preopterećuju funkcijom __call(). Parametar $name funkcije __call() sadrži ime metode koja se preopterećuje. Argumenti funkcije definiraju se kao niz u parametru $argument.

Page 18: Programiranje Za Internet 2

18

35

Klase

� Apstraktna klasa (samo kod PHP 5.x.x) definira se ključnom riječi abstract.

� Apstraktna klase se ne može instancirati.

� Klasa koja sadrži barem jednu apstraktnu metodu je apstraktna. Apstraktne metode određuju samo signaturu (potpis) metode (ime metode, povratni tip i argumente) dok implementacija metode mora biti negdje drugdje (npr. u izvedenoj klasi).

� Prilikom nasljeđivanja izvedena klasa mora implementirati sve apstraktne metode. Implementacija metoda mora zadržati vidljivost metoda iz naslijeđene klase ili je može povećati, ali je ne može smanjiti. (Npr. ako je apstraktna metoda definirana kao protected, implementacije metode mora biti ili protected ili public).

36

abstract class AbstractClass{

// Force Extending class to define this methodabstract protected function getValue();abstract protected function prefixValue($prefix);

// Common methodpublic function printOut() {

print $this->getValue() . "\n";}

}

class ConcreteClass1 extends AbstractClass{

protected function getValue() {return "ConcreteClass1";

}

public function prefixValue($prefix) {return "{$prefix}ConcreteClass1";

}}

Page 19: Programiranje Za Internet 2

19

37

Sučelje

� Sučelje (samo kod PHP 5.x.x) se definira ključnom riječi interface.

� Isto kao i drugim objektno orijentiranim jezicima sučelje deklarira metodu, ali implementacija metoda sučelja nalazi se isključivo u klasama koje implementiraju sučelje.

� Metode sučelja trebaju biti public.

� Za implementaciju sučelja koristi se operator implements. Sve metode iz sučelja trebaju biti implementirane u klasi.

� Klasa može implementirati više od jednog sučelja, ali implementirana sučelja ne smiju imati ista imena metoda.

38

// Declare the interface 'iTemplate'interface iTemplate{

public function setVariable($name, $var);public function getHtml();

}

// Implement the interface// This will workclass Template implements iTemplate{

private $vars = array();

public function setVariable($name, $var){

$this->vars[$name] = $var;}

public function getHtml(){

foreach($this->vars as $name => $value) {$template =$name.”, “.$value;

}

return $template;}

}

http://laris1.fesb.hr/sucelje.php

Page 20: Programiranje Za Internet 2

20

39

PHP

� PHP interpreter može biti instaliran ili kao CGI interpreter ili kao modul Web servera.

http://www.morsko-prase.hr/svojstva_php.php

� Kada se PHP koristi kao modul Web servera npr. Apache modul, nasljeđuje prava korisnika Web servera. To utječe na sigurnost izvođenja PHP programa. Npr. ako se preko PHP skripte pristupa bazi, ukoliko baza nema ugrađenu vlastitu kontrolu pristupa, baza treba biti pristupna korisniku koji pristupa PHP stranici (obično je to na Apache web serveru "nobody" korisnik).

� Danas većina Web hosting pružatelja usluga nudi PHP instaliran kao CGI interpreter zbog veće sigurnosti, ali ovakav način rada je sporiji.

http://www.fesb.hr/~kiki/primjeri_internet_2/svojstva_php.php

http://laris1.fesb.hr/svojstva_php.php

40

Gotove funkcije

� PHP jezik ima cijeli niz biblioteka gotovih funkcija.

http://hr.php.net/manual/en/funcref.php

Page 21: Programiranje Za Internet 2

21

41

Podrška za baze podataka

� Jedna od velikih prednosti PHP-a je i široka podrška za pristup različitim bazama podataka.

� dBase

� mSQL

� Sybase

� MySQL

� Oracle

� PostgreSQL ……

42

BAZE PODATAKA NA WEBU

� Baze na webu uglavnom koriste klijent-server komunikacijsku paradigmu. � Web server treba biti u stanju postaviti upit prema bazi podataka kao njezin

klijent te odgovor baze vratiti nazad svom HTTP klijentu koji je i postavio upit.

� Komunikacija između Web servera i servera baze (tj. servisa baze) ostvaruje se opet preko nekog posrednika (MiddleWare). Jedan posrednik može biti CGI skripta koja zahtjeve web servera prosljeđuje bazi te odgovore baze prosljeđuje nazad web serveru ili php modul integriran u web server koji izvršava php skriptu ili …..

Page 22: Programiranje Za Internet 2

22

43

BAZE PODATAKA NA WEBU

� Obično se između baze podataka i aplikacije koja pristupa bazi razvijaju API-ji koji programeru pružaju sučelje od aplikacije prema bazi. API definira koje i kako formatirane naredbe program može poslati bazi te kakav odgovor baze program može dobiti nazad.

� ODBC (Open Database Connectivity) je jedan API za pristup bazi podataka koji je razvio Microsoft.

� Implementacije ODBC postoje na različitim OS-ovima (Windows, Linux, Mac OS).

� Uz API treba biti implementiran i softverski driver koji omogućava aplikaciji koja koristi API (npr. ODBC API) da se spoji na bazu.

� ODBC driveri su razvijeni za SQL, Oracle, PostgreSQL, MySQL, itd. te za baze podataka koje nemaju pristup preko mreže tzv. “desktop baze” poput MS Accessa.

44

BAZE PODATAKA NA WEBU

� DBI (DataBase Interface) je također API za pristup bazi podataka razvijen za programski jezik Perl. DBI moduli su razvijeni za Oracle, MySQL, MiniSQL, Sybase, itd.

� MySQL baza ima razvijen API za C, C++, Eiffel, Java, Perl, PHP, Python i TCL. Za PHP, API za pristup MySQL bazi je sastavni dio PHP-a.

� MySQL je višekorisnička, višenitna (multi-thread) SQL baza podataka. SQL (Structured Query Language) je standardizirani jezik baze podataka.

� MySQL je klijent/server aplikacija koja se sastoji od server dimona (daemon - program koji se vrti u pozadini bez direktne interakcije s korisnikom) mysqld i različitih klijentskih programa i biblioteka.

Page 23: Programiranje Za Internet 2

23

45

MYSQL

� Klijenti se na MySQL server mogu spojit na dva načina. Jedan način je korištenje Unix domain socketa (file socketa) tj. lokalnog soketa (ili korištenje named pipesna Windowsima), a drugi način je korištenje TCP/IP konekcije tj. soketa.

� Unix domain socket i named pipes se koriste samo za lokalne konekcije. Web server i MySQL server moraju biti na istom računalu.

� Ako se koristi opcija sa spajanjem preko TCP/IP konekcije server baze osluškuje na portu (obično 3306) dolazne zahtjeve klijenata (kao i drugi servisi) i na njega se bilo koji klijent može spojiti sa bilo kojeg računala na mreži.

46

MySQL i PHP

� Funkcije koje omogućuju pristup MySQL serveru (servisu):

http://hr.php.net/manual/en/ref.mysql.php

Page 24: Programiranje Za Internet 2

24

47

MySQL i PHP

� mysql_connect – funkcija za otvaranje konekcije prema MySQL serveru

resource mysql_connect ( [string $server [, string $username [, string $password[, bool $new_link [, int $client_flags]]]]] )

� server – ime MySQL servera, može sadržavati i broj porta na kojem server sluša "hostname:port" ili put do file socketa ":/path/to/socket"

� username – korisničko ime za spajanje na MySQL server� password - lozinka � new_link – ako se funkcija pozove po drugi put sa istim argumentima

neće se otvarati nova konekcija nego će se dohvatiti identifikator već otvorene konekcije.

� client_flags – može biti kombinacija konstanti MYSQL_CLIENT_SSL, MYSQL_CLIENT_COMPRESS, MYSQL_CLIENT_IGNORE_SPACE ili MYSQL_CLIENT_INTERACTIVE.

� Povratna vrijednost je identifikator konekcije ili FALSE u slučaju neuspjeha.

48

MySQL i PHP

� Ako se za ime MySQL servera koristi ime “localhost” ili “localhost:port” ignorirati će se pokušaj spajanja preko TCP soketa i konekcija će se pokušati uspostaviti preko lokalnog soketa (ili named pipe na Windowsima). Ako se želi konekcija preko TCP/IP treba umjesto “localhost” koristiti “127.0.0.1”.

� Konekcija prema MySQL serveru se zatvara kada se izvrši skripta u kojoj je konekcija otvorena ukoliko se u skripti već negdje nije eksplicitno zatvorila konekcija pozivom funkcije mysql_close().

� Često se kod funkcija za rad sa MySQL bazom koristi operator kontrole greške da bi se izostavilo generiranje grešaka korisniku prilikom izvođenja skripte.

Page 25: Programiranje Za Internet 2

25

49

MySQL i PHP

� mysql_select_db – funkcija za biranje baze koja će koristiti nakon spajanja na MySQL server, nakon izbora svi upiti preko funkcije mysql_query će ići prema izabranoj bazi

bool mysql_select_db ( string $database_name [, resource$link_identifier] )

� database_name – ime baze koja se želi koristiti � link_identifier - MySQL konekcija tj. identifikator konekcije koji je

vratila funkcija mysql_connect(). Ako nije naveden podrazumijeva se korištenje identifikator od zadnjeg poziva funkcije mysql_connect(). Ako ne postoji identifikator (npr. funkcija mysql_connect uopće nije pozvana) funkcija će pokušati sama kreirati link.

� Povratna vrijednost je TRUE ako se funkcija uspješno izvršila, aFALSE u slučaju greške.

50

MySQL i PHP� mysql_query – funkcija za slanje upita trenutno izabranoj MySQL

bazi

resource mysql_query ( string $query [, resource $link_identifier] )

� query - SQL upit, na kraju ne bi trebao ići znak ; � link_identifier - MySQL konekcija tj. identifikator konekcije koji je

vratila funkcija mysql_connect(). Ako nije naveden podrazumijeva se korištenje identifikator od zadnjeg poziva funkcije mysql_connect(). Ako ne postoji identifikator (npr. funkcija mysql_connect uopće nije pozvana) funkcija će pokušati sama kreirati link.

� Povratna vrijednost za SELECT, SHOW, DESCRIBE, EXPLAIN i druge upite koji vraćaju nekakve podatke je resurs sa tim podacima. Za SQL upite sa UPDATE, DELETE, DROP, i sličnim naredbama je TRUE u slučaju uspješnog upita. U slučaju greške povratna vrijednost je uvijek FALSE.

Page 26: Programiranje Za Internet 2

26

51

MySQL i PHP

� Ukoliko je upit preko funkcije mysql_query() vratio nekakve podatke iz baze u obliku resursa taj se resurs prosljeđuje drugim funkcijama, poput mysql_fetch_array, na daljnju obradu.

� mysql_fetch_array – funkcija pristupa slogovima dohvaćenim iz baze u obliku asocijativnog niza (elementima se pristupa preko imena kolone), numeričkog niza (elementima se pristupa preko imena) ili oboje

� array mysql_fetch_array ( resource $result [, int $result_type] )

� result – resurs iz kojeg se dobavljaju dohvaćeni slogovi.� result_type – oblik niza u kojem će se vratiti podaci je definiran

jednom o sljedećih konstanti MYSQL_ASSOC, MYSQL_NUM, defaultna vrijednost je MYSQL_BOTH.

52

MySQL i PHP

$db = mysql_connect(“mysqlserver",“username",“password");

mysql_select_db(“imebaze", $db);

$result = mysql_query("SELECT * FROM nekatablica", $db) ;

while ($myrow=mysql_fetch_row($result))

{

foreach ($myrow => $value) echo $value;

}