Você está na página 1de 33

MIKRO KNJIGA - PRIKAZ KNJIGE

PHP 4 Vodi za programere


Uvod
Ova knjiga je napisana sa namerom da programerima prui dovoljno informacija i primera da mogu da razvijaju aplikacije za Web na jeziku PHP. Radije kaem aplikacije za Web nego Web strane, ili Web lokacije, jer se tako bolje istie uloga jezika PHP u razvoju Weba. Ranije su jednostavne HTML strane, sa ogranienom interaktivnou, vladale Webom. Danas je Web mnogo sloeniji. Pojedinci i organizacije oekuju mnogo vie od prisutnosti na Webu, a to zahteva dinaminije, interaktivnije aplikacije. Jezik PHP je idealan za pisanje takvih programa jer je u tu svrhu i razvijen.

Kome je namenjena ova knjiga?

Ova knjiga bie korisna irokom krugu programera koji razvijaju aplikacije za Web, ali je prvenstveno namenjena srednje iskusnim i vrlo iskusnim programerima. PHP je programski jezik, a ne jezik za projektovanje, te da bi se lake savladao, potrebno je izvesno predznanje. Programerima koji su radili sa jezicima C ili Perl, jezik PHP bie veoma blizak. Programeri koji poznaju tehnologiju Active Server Pages (ASP) kompanije Microsoft, otkrie da PHP i ASP imaju slinu strukturu. Poto ova knjiga nije namenjena ljudima koji nemaju nikakvog iskustva u programiranju, osnovni koncepti programiranja bie samo ukratko obra?eni. Podrazumeva se da italac razume programerske koncepte kao to su funkcije, promenljive i konstante.

Pravila

U knjizi se primenjuju sledea pravila: Kd i programski izlaz bie ispisani neproporcionalnim fontom . Imena datoteka e tako?e biti ispisana neproporcionalnim fontom . Naredbe i kljune rei bie ispisane polucrnim znakovima.

Pregled

Prvi deo knjige sadri kratak uvod u jezik PHP. U ovom delu nauiete i kako da instalirate i podesite izvrno okruenje PHP-a. Drugi deo knjige je namenjen programerima koji su se bavili programiranjem klasinih aplikacija, a koji sada prelaze na programiranje Web aplikacija. U ovom delu obra?eni su koncepti poput obrade obrazaca, interakcije sa korisnicima, upravljanja stanjima i nezavisnosti itaa. Trei deo se bavi strukturom i prepravljanjem koda. ;etvrti deo prikazuje upotrebu jezika PHP u situacijama iz stvarnog ivota. Tako?e sadri kljune koncepte iz ostalih delova, da bi se prikazala interakcija korisnikovog itaa Weba i PHP programa na Web serveru. Na kraju je dat referentni prirunik sa opisom svih PHP4 funkcija.

Kao nezavisan programer, ve tri godine piem programe za Web na jezicima PHP i ASP. Jezik PHP je veoma vaan za uspeh mog posla jer omoguava brzu izradu prototipa i prua snagu i pouzdanost, to je veoma vano za velike Web aplikacije. Ova knjiga bi trebalo da bude korisna alatka programerima. Neu posvetiti mnogo panje istoriji, niti razlikama izme?u PHP-a i slinih jezika. Tako?e neu praviti obiman uvod u programiranje. Sve ovo je dostupno na Webu, na adresi www.php.net . ;itaocima u predoiti upotrebu jezika PHP za pisanje kvalitetnih aplikacija za Web. Obradiu i softverski inenjering u projektima za Web, prera?ivanje postojeeg koda koji bi mogao da se upotrebi u novom projektu i prikazau popularne programe nezavisnih kompanija koji olakavaju rad sa jezikom PHP.

Autorova napomena

Primere lokacija i informacije o meni i mojoj kompaniji pronai ete na adresi mojoj lokaciji nai ete i adresu na koju moete da poaljete utiske o ovoj knjizi.

www.intechra.net

. Na

O primerima koda
Primere koda sam napisao na jeziku PHP 4.0.1 (sa zakrpom broj 2) i smestio na server Apache 1.3.11 na operativnom sistemu RedHat Linux 6.1. HTML i PHP kd sam ure?ivao programom Homesite kompanije Allaire za operativni sistem Windows NT.

ta je PHP?

PHP je programski jezik koji programerima treba da omogui jednostavnu izradu dinamikih aplikacija za Web. PHP je zapravo rekurzivna skraenica od PHP: Hypertext Preprocessor. To je programski jezik iji se kd dodaje u HTML kd Web strane, i po sintaksi je slian jezicima C, Perl i Java. Listing 1 predstavlja primer koda jezika PHP. Listing 1: Jednostavan primer jezika PHP
<html> <head> <title>Jednostavan primer</title> </head> <body> <?php echo "Zdravo iz PHP-a!" ; ?> </body> </html>

Ako se prethodni primer pokrene na dobro podeenom Web serveru, generisae HTML kd iz listinga 2. Listing 2: Rezultat programa iz listinga 1
<html> <head> <title>Jednostavan primer</title> <head> <body> Zdravo iz PHP-a! <body> </html>

PHP pretprocesor izvrava sav kd izme?u oznaka <?php i ?> smetenih u HTML kd i ispisuje rezultate u obliku teksta. Ovo nije naroito zanimljiv primer, ali dobro prikazuje kako jednostavan dinamiki sadraj moe biti razvijen unutar HTML koda. Vano je da zapamtite da se kd izvrava na Web serveru, a ne u klijentskom programu koji korisnik upotrebljava. To znai da itai Weba nisu ni svesni da je PHP upotrebljen. ;ita prima HTML kd, kao da je u pitanju obina, statina Web strana. Ovakav pristup je izazov za programere koji su navikli na standardne raunarske programe gde se korisniko okruenje izvrava na istom raunaru kao i ostatak aplikacije.

Zato bi trebalo da koristim PHP?

PHP je zreo programski jezik koji omoguava izradu aplikacija za Web sa svom potrebnom funkcionalnou. Osim to prua programski okvir za razvoj softvera, PHP sadri i podrku za pristupanje brojnim bazama podataka. To izuzetno olakava pisanje aplikacija za baze podataka na Webu. PHP podrava i rad sa protokolima IMAP, POP3, NNTP i HTTP. Osim toga, on moe da koristi prikljuke za pristupanje drugim TCP/IP protokolima. PHP se moe upotrebljavati u razliitim serverskim okruenjima. Poto je izvorni kd jezika PHP javno dostupan, on moe da se prevede za mnoge platforme, ukljuujui Linux, FreeBSD, pa ak i Windows. Korisnicima stoje na raspolaganju i binarne distribucije za platformu Win32. Izvrno okruenje jezika PHP se moe izvravati kao CGI program, ili se moe instalirati kao modul servera Apache, ili ISAPI dodatak. Tako PHP moe da radi na skoro svim platformama, od servera Apache

na Linuxu do servera IIS na Windowsu NT. Da biste raspolagali okruenjem koje se u potpunosti moe podesiti prema vaim potrebama, izaberite kombinaciju Web servera i operativnog sistema koja omoguava da sami prevedete i instalirate PHP. Ako elite da izbegnete probleme pri prevo?enju i instaliranju, izaberite binarnu distribuciju jezika PHP.

Gde mogu da dobijem pomo?


Podrku za jezik PHP moete da dobijete na Web lokaciji www.php.net , ili preko brojnih diskusionih grupa i lista slanja. Procenjeno je da je u februaru 2000. godine oko 1 400 000 Web lokacija koristilo jezik PHP. Zbog popularnosti koju je PHP stekao, veliki je broj programera i strunjaka koji vam mogu pomoi. Vie informacija o resursima dostupnim preko Interneta potraite u dodatku E.

MIKRO KNJIGA - PRIKAZ KNJIGE

PHP 4 Vodi za programere

Prevoenje i instaliranje jezika PHP4


Uvod
Pre nego to se upustite u prouavanje jezika PHP, treba da instalirate njegovo izvrno okruenje. Poto PHP podrava vie Web servera i operativnih sistema, u ovom poglavlju u detaljno objasniti kako se PHP instalira samo na neke od njih, ali to znanje ete moi da primenite i na druge platforme. U ovom poglavlju objasniu kako se PHP instalira na server Apache pod operativnim sistemom Linux i na server IIS/PWS pod operativnim sistemom Windows NT. Ove kombinacije operativnog sistema i Web servera esto se sreu i dovoljno se razlikuju tako da ete, na osnovu tih primera i uz malo truda moi da instalirate PHP u svim ostalim okruenjima. Vie detalja o instaliranju jezika PHP na razliitim platformama pronai ete na adresi www.php.net.

Preuzimanje paketa PHP


Prvi korak u instalaciji podrke za PHP jeste preuzimanje njegovog izvrnog okruenja sa Interneta. Odeljak za preuzimanje datoteka lokacije www.php.net nudi nekoliko mogunosti. Najnovija verzija jezika PHP nalazi se na vrhu spiska. Ako elite da ga instalirate na *nix platformu, preporuujem da preuzmete sav izvorni kd i sami ga prevedete. Termin *nix odnosi se na sve platforme sline platformi Unix, na primer Linux, BSD, Solaris i ostale. Ako elite da instalirate PHP na Windows platformu, preporuujem da preuzmete binarnu verziju. Sa iste moete preuzeti prethodne verzije jezika, dokumentaciju i izabrane pomone programe. Starije verzije PHP-a zatrebae vam ako elite da iskoristite postojee programe i da pri tom izbegnete probleme nekompatibilnosti verzija.

Instaliranje binarne verzije

Poto nabavite binarnu distribuciju PHP-a, sledi jednostavno instaliranje. Najea binarna instalacija je ona za Windows. Poto postoje binarne distribucije i za neke *nix platforme, ukratko u opisati postupak njihovog instaliranja.

Kada radite sa PHP-om, gotovo uvek ete imati na raspolaganju vie mogunosti. Binarna instalacija za Windows sadri verzije koje podravaju standarde Common Gateway Interface (CGI) i ISAPI. Ako PHP elite da koristite na Internet Information Serveru (IIS) ili Personal Web Serveru (PWS), odluite se za ISAPI verziju. CGI verzija zahteva da se PHP posebno pokree svaki put kad treba prikazati Web stranu, to je manje efikasno od upotrebe dinamiki povezane biblioteke, kakav je ISAPI dodatak. ISAPI verzija je, uz to, bezbednija od CGI verzije. Instaliranje ISAPI modula PHP Ako koristite IIS/PWS ili drugi Web server za Windows koji podrava standard ISAPI, onda je najbezbednije i najprilagodljivije da izaberete ISAPI modul PHP. Da biste instalirali ISAPI modul, kopirajte datoteke php4ts.dll i msvcrt.dll u Windowsov sistemski direktorijum (to je najee \windows\ system, u Windowsu 9x/Me, odnosno \winnt\system32, u Windowsu NT). Da bi bilo koja verzija PHP-a radila na Windowsu, potrebno je da ove datoteke budu u sistemskom direktorijumu. I ostale DLL datoteke moete da kopirate u sistemski direktorijum, ali to nije obavezno.

Instaliranje binarne distribucije za Windows

Sledei korak je podeavanje Internet Information Servera ili Personal Web Servera tako da za obradu PHP datoteka koristi ISAPI modul. To se obavlja u odeljku za podeavanje IIS-a programa Microsoft Management Console, koji se najee nalazi u meniju Windows NT Option Pack. Na slici 1.1 prikazan je meni Windowsa NT u kome se nalazi opcija za pokretanje ovog programa.

Kada je program Microsoft Management Console pokrenut, pritisnite desnim tasterom mia vor vaeg Web servera (koji je verovatno oznaen sa Default Web Site) i iz prirunog menija izaberite opciju Properties, kao to je prikazano na slici 1.2. U okviru za dijalog Properties izaberite jeziak Home Directory i pritisnite dugme Configuration. To omoguuje da dodajete i ure?ujete ISAPI module.

Pritisnite dugme Add i unesite traene informacije. Slika 1.3 prikazuje postupak pridruivanja ISAPI modula PHP datotekama sa nastavkom imena phtml.

Kada nastavku imena datoteke pridruite modul, odgovarajue informacije se prikazuju u okviru za dijalog Application Configuration. Ako elite da testirate sistem, korisno je jednoj grupi nastavaka imena pridruiti ISAPI modul PHP, a drugoj CGI program. Podeavanja mog Web servera prikazana su na slici 1.4, gde moete videti CGI program pridruen skriptovima verzija 3 i 4 i ISAPI modul pridruen skriptovima verzije 4. Ovakvo podeavanje je korisno ako elite da testirate razlike izme?u koda verzije 3 i verzije 4 jezika PHP. Kada zavrite podeavanje, ponovo pokrenite Web server. To moete uraditi pomou apleta Services iz Windowsovog Control Panela ili zadavanjem sledeih naredaba u komandnom prozoru:

net stop iisadmin net start w3svc

Kada ponovo pokrenete server, trebalo bi da napiite jednostavnu PHP datoteku, poput listinga 1, i uitate je sa servera. Ako ste sve ispravno podesili, server e vratiti informacije o upotrebljenoj verziji jezika PHP. Listing 1: Probni PHP skript
<html> <head> <title>phpinfo()</title> </head> <body> <?php phpinfo(); ?> </body> </html>

Treba da znate da se PHP isporuuje sa napomenom o stanju ISAPI modula, u kojoj se navodi da nije najboljeg mogueg kvaliteta. U napomeni se za postizanje apsolutne stabilnosti preporuuje upotreba CGI programa umesto ISAPI modula. U sledeem odeljku objanjena je upotreba PHP-a kroz CGI program. Upotreba PHP-a kao CGI programa Ako ne koristite Web server koji podrava ISAPI module, ili iz nekog drugog razloga elite da koristite CGI programe, proces instaliranja slian je onom u prethodnom sluaju. Zapravo, koraci su isti osim kada je u pitanju dodeljivanje programa za obradu nastavcima imena datoteka. Umesto datoteke ISAPI.DLL, izaberite datoteku php.exe. IIS/PWS Web server prosle?uje parametre CGI programu, tako da osim imena datoteke treba navesti opcije komandne linije %s %s. To je prikazano na slici 1.4 u redu koji prikazuje nastavak imena datoteke .php4. Drugi Web serveri imaju sline metode za pridruivanje programa nastavcima imena datoteka. Na adresi www.php.net/manual/config-apache-nt.html nalazi se izvrstan vodi za podeavanje servera Apache za Windows NT. Informacije o upotrebi jezika PHP na drugim Web serverima za Windows mogu se pronai i na lokaciji www.php.net.

Za neke *nixe postoje binarne distribucije PHP-a, negde ak i u sklopu instalacije Web servera. Neke softverske kue, na primer Red Hat, distribuiraju binarne verzije PHP-a na svojim lokacijama. One su najee u obliku Red Hat Package Manager (RPM) paketa. Prednost formata datoteka RPM jeste njihovo jednostavno instaliranje. Umesto da se brinete o postupku prevo?enja, RPM datoteke sadre verziju specifinu za odre?enu platformu koja je spremna za upotrebu. Mana ovakvog pristupa je ta to postoji mnogo varijanata *nix platformi tako da izbor potrebne RPM datoteke moe predstavljati problem za

Druge binarne instalacije

poetnike. RPM datoteke ne zadaju uvek sve opcije za podeavanje, potrebne za potpuno instaliranje i upotrebu. Ako raspolaete RPM paketom izvrnog okruenja jezika PHP, moete ga instalirati zadavanjem naredbe rpm -i <rpmdatoteka.rpm> na komandnoj liniji. Ova naredba instalirae sve binarne datoteke u direktorijume koji su zadati prilikom izrade RPM datoteke. Nazivi i lokacije ovih direktorijuma najee su zadovoljavajui. Nakon instaliranja treba runo da podesite Web server da koristi binarne PHP datoteke. U nastavku poglavlja objasniu kako da podesite server Apache. Drugi Web serveri podeavaju se na slian nain. Bez obzira na to da li PHP koristite kao CGI program ili modul, prvi korak u podeavanju je isti. Treba da napravite vezu izme?u nastavka imena datoteke i tipa medija. To ete uraditi tako to ete dodati redove sline ovim:
AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml AddType application/x-httpd-php .inc

Prethodni redovi podeavaju server Apache tako da sve datoteke sa nastavcima imena datoteka php, phtml i inc tretira kao tip medija application/x-httpd-php. Za obradu ovakvih datoteka dalje se koristi PHP. Ako ste instalirali modul za PHP na serveru Apache, sledei korak je menjanje datoteke httpd.conf tako da ona uitava PHP modul:
LoadModule php4_module libexec/libphp4.so

Ako ste instalirali CGI program i elite da ga koristite sa serverom Apache, datoteku httpd.conf treba da izmenite malo drugaije. Direktiva za podeavanje koja sledi slina je prethodnoj, ali sada sadri informacije o stvarnom binarnom PHP programu:
Action application/x-httpd-php /cgi-bin/php

Direktiva Action zadaje tip medija koji izvrava skript kada odgovarajua datoteka bude zahtevana od servera. U ovoj direktivi treba zadati putanju do PHP interpretatora. Sada ponovo morate pokrenuti Web server da bi nova konfiguracija postala vaea. Server Apache moete ponovo pokrenuti zadavanjem komande:
/putanja/do/apachectl restart

Na Red Hat Linuxu Apache se ponovo pokree komandom:


/etc/rc.d/init.d/httpd restart

Sada bi trebalo da isprobate server pozivajui iz itaa Weba probnu PHP datoteku iz listinga 1. Binarna distribucija jezika PHP moe da pojednostavi poetak na *nix platformama, ali i da izazove probleme. Zbog velikog broja *nix platformi moda ete teko pronai prevedenu verziju PHP-a koja vam odgovara. U nekim situacijama samo pronalaenje odgovarajue verzije moe da traje koliko i preuzimanje, prevo?enje i instaliranje paketa izvornog koda okruenja PHP. Sada emo objasniti ovaj postupak.

Prevo?enje PHP-a
Ako vam je potrebno da prilago?ena instalacija PHP-a bude fleksibilna, ili ako elite da proirite PHP sopstvenim dodacima (o emu e vie rei biti u poglavlju 11 "Ponovna upotreba koda") morate da znate kako da prevedete PHP paket. U zavisnosti od platforme koju koristite, moda neete ni imati izbora, ako za nju ne postoji binarna distribucija.

Prevo?enje jezika PHP za platformu *nix


Ovaj odeljak objanjava kako da prevedete PHP za upotrebu na *nix platformama. Ne zaboravite da se termin *nix odnosi na sve platforme zasnovane na operativnom sistemu Unix, ukljuujui Linux, BSD, Solaris i ostale. Ove platforme su razliite, ali mnogi koraci postupka prevo?enja potpuno su isti. Vie informacija o prevo?enju za specifine platforme potraite na lokaciji www.php.net. Za svaku platformu postoji nekoliko naina na koje se PHP moe prevesti. Ako koristite server Apache na *nix platformi, PHP moete prevesti kao binarni program, modul koji se dinamiki uitava ili statiki povezanu biblioteku. Ako ne koristite Web server Apache, za vie informacija moraete da pregledate dokumentaciju servera koji koristite i jezika PHP. Po mnogima, modul koji se dinamiki uitava na serveru Apache najbolje je reenje u veini situacija. Ako je PHP statiki povezan sa serverom, bie tee promeniti njegova podeavanja. Ako ga koristite kao CGI program, to naruava bezbednost sistema.

U sledeem odeljku pretpostavljam da ste nabavili najnoviji izvorni kd PHP-a i da ste sve potrebne datoteke raspakovali u direktorijume na raunaru na kome ete prevoditi. Postupak prevo?enja je u osnovi isti za sve tipove. Na poetku treba pokrenuti skript configure kako bi opcije za podeavanje bile zadate. Nakon toga, pomou programa make, paket se prevodi. Na kraju je potrebno instalirati PHP i ponovo pokrenuti server. Detalji skripta za podeavanje dati su u odeljku za prevo?enje CGI programa pa se preporuuje da ovaj odeljak proitate kao uvod. Prevo?enje CGI programa Prevo?enje jezika PHP kao CGI programa je najjednostavniji metod prevo?enja i moe posluiti kao dobra veba ukoliko nikada ranije niste prevodili programe na *nix platformama. Svi koraci dati su u listingu koji sledi, ali treba napomenuti da neki od njih nisu obavezni. Koraci koji su opcioni ispisani su kurzivom. Referencu php_dir treba da zamenite nazivom vaeg osnovnog direktorijuma za PHP.
cd <php_dir> rm config.cache make clean ./configure make make install

Izvravanjem prethodnih komandi obrisaete sva prethodno snimljena podeavanja, sve binarne objekte i zatim prevesti PHP kao CGI program. Ovo je najjednostavnija varijanta postupka prevo?enja i navedena je kao primer. Prilikom stvarnog prevo?enja, skript configure definisae opcije koje zadaju atribute jezika PHP. Drugi i trei red su opcioni jer briu prethodna podeavanja i postupak izgradnje. Ako prethodno niste podeavali ili prevodili PHP, ne treba da zadajete ove naredbe. Moete da ih preskoite i u veini drugih situacija, ali ponekad e vam ipak zatrebati. Ako znatno menjate podeavanja PHP-a, ili ako menjate ciljni oblik sa CGI programa na neki drugi tip, moda ete morati da zadate ove komande da biste dobili ispravan prevod. U zavisnosti od brzine raunara, postupak prevo?enja i podeavanja moe da traje izvesno vreme. Ako izme?u dva prevo?enja sauvate privremene datoteke sa parametrima i binarne objekte, skratiete trajanje prevo?enja. Skript configure proverava da li u sistemu postoje razliite alatke, datoteke i druge sistemske informacije. On zatim pravi skript za prevo?enje koji je specifian za datu platformu. Ako tokom podeavanja do?e do greke, to obino govori da potrebna alatka ili datoteka nedostaju, ili da nisu ispravno podeene. Kada se obrada skripta za podeavanje zavri, bie napravljena privremena datoteka sa parametrima, config.cache, koja sadri informacije o sistemu, tako da nee biti potrebno da proveravate sistem kada ponovo zaponete postupak podeavanja. Ako znatno izmenite konfiguraciju sistema, treba da obriete datoteku sa parametrima kako bi nova konfiguracija bila prepoznata. Kada se prethodne naredbe izvre, nov program php bie vam na raspolaganju. Moete ga testirati tako to ete zadati sledeu naredbu:
php < /dev/null

Ako se na ekranu pojavi neto poput:


X-Powered-By: PHP/4.0.2 Content-type: text/html

to znai da ste uspeno preveli i instalirali PHP kao CGI program. Ne zaboravite da ova verzija jezika PHP verovatno nema svojstva koja su vam potrebna, jer je prevedena samo sa podrazumevanim podeavanjima. Moraete ponovo da pokrenete skript configure kako biste zadali opcije koje su vam potrebne kao i da ponovo prevedete i instalirate PHP. Jedna od dobrih osobina podrazumevanih podeavanja jeste to to ukljuuju mnoga popularna svojstva, izme?u ostalog podrku za baze podataka MySQL i sesije. Pomou prethodnih naredaba preveete PHP tako da odmah moete da ponete da piete skriptove. Ako vam treba podrka za druge baze podataka ili za druge dodatke, moraete da zadate odgovarajue opcije za podeavanje. Da biste prikazali listu vaeih opcija za podeavanje, zadajte sledeu naredbu:
./configure --help

Mnoge opcije koje utiu na svojstva jezika PHP imaju oblik --enable-SVOJSTVO ili --with-PAKET. Da biste PHP-u dodali novo svojstvo, upotrebite jednu od sledeih opcija:
--enable-SVOJSTVO --enable-SVOJSTVO=yes

Da biste iskljuili neko svojstvo, upotrebite opciju:

--disable-SVOJSTVO --enable-SVOJSTVO=no

Potpun spisak opcija za podeavanje dat je u dodatku C. Svojstva koja koriste sintaksu --enable obino su ugra?ena u PHP, na primer, mogunost upotrebe kratkih oznaka ili podrka za FTP. Paketi (engl. packages) su najee spoljanji moduli koji se mogu povezati sa PHP-om. To su, na primer, podrka za baze podataka Oracle, ili podrka za programski jezik Java. Ovakva svojstva zahtevaju dodatni izvorni kd i sledeu sintaksu za ukljuivanje:
--with-PAKET=/putanja/do/paketa

Da biste iskljuili paket, upotrebite sledee opcije:


--with-PAKET=no --without-PAKET

Na primer, razmotrite sledeu naredbu za podeavanje:


./configure --with-apxs=/www/bin/apxs --with-java --with-cybercash=/home/blake/m ck-3.2.0.6-i586-pc-linux-gnulibc2.1 --withunixODBC=/usr/local/unixODBC --disab1 e-debug --enable-track-vars --enable-fin_funcs --with-snmp=/home/blake/ucd-snmp4.1.2 --enable-ucd-snmp-hack

Prethodna naredba podeava PHP tako da koristi pakete Java, Cybercash , Simple Network Management Protocol (SNMP) i unixODBC. Lokacija datoteka za podrku jeziku Java nije zadata pa e skript za podeavanje koristiti podrazumevanu lokaciju ovog paketa. Osim toga, zadata je opcija - with-apxs koja programu za prevo?enje nalae da napravi modul za server Apache koji se dinamiki uitava, a ne CGI program. Kasnije u o ovome vie govoriti. Prethodnom naredbom iskljueno je svojstvo debug information, dok su funkcije track-vars, fin-funcs i ucd-snmp-hack ukljuene. Svojstvo fin-funcs je dodatak napisan specijalno za upotrebu u ovoj knjizi (pogledajte poglavlje 11), a ostala su standardni PHP elementi opisani u dodatku C. Mada prethodna naredba ne generie CGI program, dobro ilustruje mo podeavanja. Mnoge pakete koji mogu da se ukljue u prevod treba zasebno preuzeti. Vie informacija o tome odakle moete da preuzmete dodatne pakete pronai ete na adresi www.php.net. Kada prevedete PHP kao CGI program, podesite Web server tako da ga koristi. Da biste podesili server Apache, u datoteku httpd.conf dodajte sledee redove:
AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml AddType application/x-httpd-php .inc Action application/x-httpd-php /cgi-bin/php

Prva tri reda saoptavaju serveru Apache da je application/x-httpd-php tip medija svih datoteka sa nastavkom imena datoteke php, phtml i inc. Poslednja stavka saoptava serveru da sve datoteke tog tipa medija prosledi PHP interpretatoru. Ovde se podrazumeva da ste PHP kopirali u direktorijum cgi-bin na Web serveru. Ovi redovi predstavljaju najmanje to treba da uradite da bi PHP radio na serveru Apache. Isti rezultat se moe postii i na druge naine. Vie informacija o tome potraite u uputstvu za podeavanje servera Apache. Prevo?enje PHP-a za statiko povezivanje sa serverom Apache Server Apache se isporuuje sa ukljuenom mogunou za statiko povezivanje dodatnih modula direktno sa serverom. Korienjem ove opcije poboljaete bezbednost serverskog sistema i performanse aplikacija. Jedina mana ovog pristupa jeste ta to svaki put kada prevodite PHP morate da prevodite i server. To zahteva mnogo vremena i izaziva glavobolju, jer problem sa podeavanjem PHP-a moe da izazove blokiranje servera. Poto postoje brojni razlozi za upotrebu statiki povezanih modula, njima emo posvetiti sledee odeljke. Pre nego to podesite i prevedete PHP, podesite server. ;im preuzmete i raspakujete izvorni kd servera Apache, podesite server sledeim naredbama:
cd <apache_dir> ./configure

Kada to uradite, moete da podesite i prevedete PHP sledeim naredbama:


cd <php_dir> ./configure --with-apache=<apache_dir> make make install

Opcija --with-apache upotrebljena je da bi se PHP preveo kao statika biblioteka i da bi se zadala putanja do izvornog koda servera Apache. Sada treba da prevedete Apache pomou sledeih naredaba:
cd <apache_dir> $ ./configure --prefix=/www --activatemodule=src/modules/php4/libphp4.a make make install

Opcija --prefix moe da se razlikuje u vaem okruenju jer ona zadaje gde su instalirane datoteke nezavisne od arhitekture. Poto prevedete i instalirate Apache sa ovim mogunostima, raspolagaete serverom koji ima ugra?enu podrku za PHP. Sada moete da pokrenete server i pomou probne datoteke, poput one iz listinga 1, testirate njegove parametre. Stavke za podeavanje servera Apache iz datoteke httpd.conf moraju da budu zadate kako bi Apache ispravno obra?ivao PHP datoteke. Sistem sada treba da podesite na osnovu nastavaka imena datoteka koji predstavljaju PHP datoteke. Standardno podeavanje je slino sledeem:
AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml AddType application/x-httpd-php .inc

Ova uputstva se odnose na prevo?enje i instaliranje jednostavne verzije jezika PHP sa svim standardnim mogunostima. Vie detalja o menjanju parametara programa PHP potraite u odeljku o PHP CGI programu. Prevo?enje jezika PHP kao dinamikog modula za server Apache Prevo?enje PHP-a kao dinamikog modula za server Apache, ne razlikuje se mnogo od pomenutih metoda. Jedna od prednosti ove metode jeste da moete ponovo da prevedete PHP a da pri tom ne morate da prevodite i server. Neki od dodataka za PHP (poput podrke za Javu) tako?e zahtevaju da se PHP koristi dinamiki da bi mogli da rade. Da bi server Apache podravao dinamike module, moda ete morati da ga ponovo prevedete pomou sledeih naredaba:
cd <apache_dir> make clean ./configure --enable-module=so --enable-rule=SHARED_CORE -prefix=/www make make install

Osim to prevode server Apache, prethodne naredbe pripremaju skript apxs koji je potreban za izgradnju dinamikog modula. Ako prilikom prevo?enja PHP-a kao dinamikog modula do?e do problema sa skriptom apxs, moda ete morati da ponovite prethodne korake da biste dobili ispravno podeen skript. Nakon to prevedete server Apache tako da podrava dinamiko uitavanje modula, prevedite PHP sledeim naredbama:
cd <php_dir> make clean rm config.cache ./configure --with-apxs=/www/bin/apxs (druge opcije) make make install

Naredbe za brisanje i ovde su opcione, ali preporuujem da ih zadate ako ste prethodno prevodili PHP sa potpuno drugim podeavanjima. Putanja u opciji --with-apxs trebalo bi da bude potpuna putanja do skripta apxs na serveru. Kao i u drugim postupcima za podeavanje i prevo?enje, i sada morate da podesite server Apache tako da koristi nastavke imena datoteka sa PHP programima. Kada to uradite, pokrenite server i zahtevajte probni PHP skript. Zakljuak o prevo?enju jezika PHP za *nix platforme Cilj ovog odeljka nije da prui iscrpnu listu svih moguih opcija za podeavanje, ve da ilustruje osnovne metode za izgradnju razliitih tipova PHP-a. Ako niste ve prevodili PHP, trebalo bi najpre da ga izgradite sa osnovnim mogunostima i da kasnije dodajete nove. Kada se bolje upoznate sa procesom prevo?enja, jednostavno ete testirati razliite konfiguracije i dodavati mogunosti koje nisu obuhvaene standardnim podeavanjima. Poto prevedete PHP i proverite da li radi sa vaim serverom, trebalo bi da razmotrite opcije za podeavanje tokom rada o kojima u vie govoriti kasnije u ovom poglavlju.

Prevo?enje jezika PHP za Windows

Prevo?enje jezika PHP za Windows mnogo je sloenije od prevo?enja za *nix platforme. Dokumentacija koja je dostupna preko Interneta preporuuje da jezik prevedete pomou programskog jezika Visual C++ 6, mada to moete da uradite i pomou verzije 5 ovog programskog jezika. Pokuao sam da PHP prevedem pomou programa C++ Builder kompanije Borland, ali nisam uspeo. Glavni problem su razliiti formati objekata u bibliotekama koje koriste Borland i Microsoft. Moete da koristite prevodioca kompanije Borland, ali bi pre toga trebalo da prevedete sve biblioteke jezika PHP. Nadalje u podrazumevati da koristite Visual C++. Pre nego to zaponete, preuzmite neke pomone programe i datoteke. U sledeoj tabeli navedeni su svi programi i datoteke koje bi trebalo da preuzmete kao i adrese na kojima se nalaze. Alatke Cygwin, spomenute u narednoj tabeli, predstavljaju skup popularnih programa udruenja GNU, kakvi su gcc, make i bison. Neke od ovih alatki potrebne su za rad prevodioca pa morate da ih preuzmete i instalirate pre nego to zaponete prevo?enje. Ostale datoteke tako?e su potrebne, ali one su uglavnom deo distribucije jezika PHP, a ne nezavisni proizvodi. Izvorni kd jezika PHP je isti onaj koji se koristi za platforme *nix. Treba vam i pomoni program za raspakivanje arhiviranih datoteka. Ja koristim WinZip jer bez problema raspakuje datoteke u formatu .tar.gz. I drugi programi za rad sa arhiviranim podacima podravaju ove formate, tako da i njih moete da koristite. Da biste zapoeli prevo?enje, najpre instalirajte alatke Cygwin. Moda ete morati runo da dodate promenljivu okruenja kako biste zadali lokaciju instalacione verzije alatki Cygwin. Ako koristite Windows 95, ovu promenljivu moete da dodate u datoteku autoexec.bat.
T abela 1.1 Dodatne datoteke i programi i njihove lokacije Program ili datoteka Lokacija Izvorni kd jezika PHP www.php.net/downloads.php Alatke Cygwin http://sources.redhat.com/cygwin/ PHP alatke za prevo?enje na platformi Win32 www.php.net/extra/win32build.zip Biblioteka BCMath www.php.net/version4/downloads/number.tar.gz Zamena za datoteku resolv.lib www.php.net/version4/downloads/bindlib_w32.zip

U Windowsu NT pritisnite desnim tasterom ikonicu My Computer i iz prirunog menija izaberite opciju Properties. Izaberite karticu Environment i dodajte novu promenljivu, kao to je prikazano na slici 1.5. Ime promenljive treba da bude CYGWIN, a njena vrednost - putanja do direktorijuma u koji ste instalirali alatke Cygwin.

Zatim napravite direktorijum i u njega raspakujte sadraj arhive win32build.zip. Pokrenite Visual C++ i iz menija Tools izaberite Options. Zatim izaberite karticu Directories, kao to je prikazano na slici 1.6. Iz liste Show directories for izaberite stavku Executable Files i dodajte putanju do direktorijuma sa alatkama Cygwin. Iz padajue liste izaberite opciju Include Files i zadajte lokaciju direktorijuma win32build\include (slika 1.6). Na kraju iz liste izaberite stavku Library files i zadajte lokaciju direktorijuma win32build\lib. Time ste podesili prevodioca jezika Visual C++ da koristi dodatne alatke i datoteke koje ste upravo instalirali.

Sledei korak je da prevedete novu verziju datoteke resolv.lib. Najpre napravite nov direktorijum i u njega raspakujte datoteke iz arhive bindlib_w32.zip. U okruenju Visual C++ otvorite projekat bindlib.dsp. Iz menija Build izaberite opciju Set Active Configuration i zatim verziju za ispravljanje greaka ili finalnu verziju biblioteke, u zavisnosti od vaih potreba. Pritisnite taster F7 da zaponete prevo?enje. Kada se prevo?enje zavri, kopirajte datoteku resolv.lib u direktorijum win32build\lib. Sada raspakujte izvorni kd jezika PHP i datoteku number.tar.gz pomou programa za raspakivanje ili pomonog programa Tar paketa Cygwin. Kopirajte datoteke number.c i number.h u direktorijum ext/bcmath. Ako ste proli sve do sada opisane korake, spremni ste za prevo?enje jezika PHP. Pokrenite Visual C++ i otvorite datoteku projekta php4ts.dsp koja se nalazi u direktorijumu win32. Projekat sadri nekoliko konfiguracija. Najlake je da ponete tako to ete izgraditi CGI program izborom finalne verzije ili verzije za uklanjanje greaka, kao to je prikazano na slici 1.7.

Prevedite projekat i ako sve bude ilo po planu, imaete nov prilago?eni PHP, spreman za upotrebu. Ako vam je potrebna ISAPI ili NSAPI verzija PHP-a, izaberite odgovarajuu verziju i ponovo prevedite izvorni kd. Kao to je reeno, najtei deo prevo?enja PHP-a za Windows jeste poetno podeavanje. Kada to zavrite, ostatak je jednostavan kao na platformama *nix.

Zakljuak o prevo?enju jezika PHP


Prevo?enje jezika PHP za Windows prvi put je mnogo sloenije od prevo?enja za *nix, ali kada sve podesite, ostatak posla je jednostavan. Kada savladate postupak prevo?enja na dvema platformama, lako ete razviti specijalizovane verzije jezika PHP koje do najsitnijih detalja zadovoljavaju vae potrebe. Ako nameravate da pravite dodatke za PHP, morate u potpunosti da razumete proces prevo?enja. Vie informacija o izradi dodataka pronai ete u poglavlju 11.

Podeavanje opcija za izvravanje

Bez obzira na to koju verziju jezika PHP elite da koristite, opcije za izvravanje se podeavaju na isti nain. Ponaanje PHP-a tokom rada odre?eno je sadrajem datoteke php.ini. Ova datoteka se isporuuje sa distribucijom jezika PHP u dve verzije, kao php.ini-dist i php.ini-optimized. Ukoliko ne poznajete optimizovana podeavanja, trebalo bi da ponete sa datotekom php.ini-dist koja sadri osnovna podeavanja. Ovu datoteku najpre treba da kopirate i da joj promenite ime u php.ini, kao to je opisano u tabeli 1.2.

Tabela 1.2 Platforme za PHP i lokacije datoteke php.ini Platforma Lokacija datoteke php.ini Windows Direktorijum \windows u Windowsu 95, odnosno \winnt u Windowsu NT.

*nix

Moete je odrediti pomou funkcije phpinfo(), ali to je najee /usr/local/lib

Zatim je otvorite u programu za ure?ivanje i unesite izmene koje su vam potrebne. Datoteka php.ini sastoji se od odeljaka koji su me?usobno razdvojeni sa [ime_odeljka], kao u Windowsovim ini datotekama. Datoteka sadri kratke komentare, odnosno opise odeljaka i mogunosti za podeavanje opcija. Na primerima u pokazati kada treba izmeniti podeavanja opcija u ovoj datoteci da bi one mogle da rade. U primeru e najee biti dat naziv odeljka, naziv opcije i vrednost koju treba da joj dodelite u datoteci php.ini. Kada u datoteku unesete izmene, ponovo pokrenite server Apache da bi izmene bile usvojene. Postoje i drugi naini za menjanje opcija i o njima e kasnije biti vie rei.

Upotreba datoteke php.ini

Ako smatrate da treba da izmenite podeavanja PHP-a, preporuujem da unesete izmene i zatim ponovo pokrenete server. Ako koristite CGI verziju jezika PHP, ne morate ponovo da pokreete server jer se datoteka php.ini ita svaki put kada se pozove CGI program. Pomou stavki za podeavanje izvetavanja o grekama moete da promenite nain na koji PHP prijavljuje greke. U podrazumevanom stanju te stavke imaju sledee vrednosti:
error_reporting = E_ALL & ~E_NOTICE ; Prikai sve sem obavetenja display_errors = On ; Ispis svih greaka (u obliku HTML koda) log_errors = Off ; Bez snimanja greaka u datoteku error_log = syslog ; Prijavi greke sistemu za praenje rada

Prva stavka zadaje reim u kome se prijavljuju sve greke osim greaka tipa E_NOTICE (obavetenje). Sledei red nalae da greke budu prikazane zajedno sa HTML kodom. Sledea dva reda zadaju nain zapisivanja greaka. Pretpostavimo da u zavrnoj verziji projekta ne elite da se greke prikazuju, ve da se zapisuju u datoteku. To zadajete sledeim stavkama:
error_reporting = E_ALL; Prikai sve greke display_errors = Off ; log_errors = On ; Prijavi greke sistemu za praenje rada error_log = /tmp/php_log ; Zapii greke u datoteku /tmp/php_log

U gornjem primeru podesili ste PHP tako da sve greke, ukljuujui i obavetenja, zapisuje u datoteku /tmp/php_log. Naravno, morate da dozvolite pisanje u tu datoteku kako bi program mogao da je koristi. Poto postoji vie mogunosti podeavanja, ovde neu navesti sve. Detaljna lista nalazi se u dodatku D. Tamo je uopteno objanjeno kako se ova podeavanja koriste. Da biste zadali odre?enu vrednost, otvorite datoteku php.ini u programu za obradu teksta i potraite odgovarajuu stranu. Najee ete nai dovoljno komentara da odredite potrebnu vrednost.

Dva naina za podeavanje izvrnog okruenja jezika PHP ne oslanjaju se na datoteku php.ini. Prvi nain je da izmene zadate u datotekama httpd.conf ili .htaccess servera Apache. Prvi nain moete da koristite ako elite da PHP zasebno tretira odre?eni direktorijum ili virtuelni raunar (engl. virtual host). Drugi nain se najee koristi ako nemate direktan pristup datotekama php.ini ili httpd.conf. To se najee deava kada je Web lokacija na serveru dobavljaa Internet usluga ili kompanije koja se bavi iznajmljivanjem prostora za Web lokacije. Taj nain koristite samo kada nemate drugi izlaz jer se datoteka .htaccess uitava i analizira svaki put kada klijent zatrai Web stranu iz istog serverskog direktorijuma, ime se usporava rad Web lokacije. U svakom sluaju, nain podeavanja PHP-a je isti. Pomou stavki za podeavanje php_value i php_flag zadajte vrednosti koje su vam potrebne. Na primer, sledee stavke zadaju prethodno pomenuta podeavanja za prijavljivanje greaka:
<VirtualHost 192.1.1.1> ServerAdmin blake@intechra.net DocumentRoot /www/hosts/wwwprojects/ ServerName www.testserver.com php_value error_reporting 2047 php_flag display_errors off php_flag log_errors on php_value error_log /tmp/php_log </VirtualHost>

Drugi naini za podeavanje izvrnog okruenja jezika PHP

Prethodna podeavanja navedena u datoteci httpd.conf zadaju poseban reim prijavljivanja greaka virtuelnog servera www.testserver.com. Ako virtuelni serveri koriste isti raunar, tada se vrednosti iz datoteke php.ini koriste na uobiajen nain. Ovaj pristup omoguava da izvrno okruenje jezika PHP bude razliito podeeno u zavisnosti od toga kom direktorijumu ili virtuelnom serveru pristupate. Ako morate da podesite PHP a pri tom nemate direktan pristup datotekama php.ini ili httpd.conf, upotrebite datoteku .htaccess servera Apache. Ova mogunost je korisna i kada jedan direktorijum velike lokacije ima zasebna podeavanja. Na primer, potrebna su vam specifina podeavanja za direktorijum koji koristite za uklanjanje greaka iz programa. Evo kratkog primera datoteke .htaccess:
php_value error_reporting 2039 php_flag log_errors off php_flag display_errors on

Obratite panju na to kako je u oba primera datoteke za podeavanje servera Apache vrednost stavke error_reporting zadata brojem, a ne imenom. Izgleda da je to jedini nain da njena vrednost bude ispravno zadata. Zbog toga morate da imate na umu da, prilikom podeavanja jezika PHP pomou stavki servera Apache, kao vrednosti ne koristite konstante PHP-a. U suprotnom, neete dobiti oekivane rezultate. Da bi vam mo dostupnih mehanizama za podeavanje i prethodni primeri bili jasniji, pogledajte sliku 1.8 koja prikazuje fleksibilnost pri prilago?avanju PHP-a vaem okruenju.

Saetak

U ovom poglavlju predstavljeno je nekoliko osnovnih mehanizama za poetak rada sa jezikom PHP. Zbog velike prilagodljivosti i broja podranih platformi, nije mogue navesti sve njegove konfiguracije. Na osnovu objanjenja iz ove knjige i informacija sa lokacije www.php.net, moi ete sami da instalirate PHP na vaoj platformi. Treba da znate da PHP ima vie funkcija za menjanje parametara izvrnog okruenja. U takve funkcije spadaju error_reporting() i set_time_limit(). Vie detalja o ovim funkcijama pronai ete u dodatku A.

MIKRO KNJIGA - PRIKAZ KNJIGE

PHP 4 Vodi za programere

Jezik PHP
Uvod
Ovo poglavlje predstavlja kratak pregled programskog jezika PHP. Kao to sam rekao u uvodu, ne nameravam da mnogo prostora posvetim objanjavanju optih programerskih principa. U ovom poglavlju objanjena je PHP sintaksa uobiajenih programskih elemenata kakvi su promenljive, konstante i funkcije. Primeri u ovom poglavlju moda ne prikazuju najbolje programerske tehnike, ali zato ilustruju sintaksu i upotrebu jezika PHP. Potpuna objanjenja svojstva jezika potraite u odeljku sa dokumentacijom na lokaciji http://www.php.net.

Opta sintaksa

Poto je PHP kd obino ugra?en u HTML, postoje posebne oznake koje razdvajaju blokove PHP koda od okolnog HTML koda. Upotreba ovih oznaka naziva se izdvajanje iz HTML-a. Listing 1: Razliiti naini za razdvajanje PHP koda od HTML koda
<? echo "Metod izdvajanja pomou kratkih PHP oznaka<br>"; ?> <?php echo "izdvajanje pomou potpunih PHP oznaka<br>"; ?> <script language="php"> echo "neki programi za ure?ivanje HTML koda ne vole nestandardne oznake<br>"; </script> <% echo "moda vie volite oznake u stilu jezika ASP <br>"; %>

Prvi nain za izdvajanje bloka PHP koda moe da se koristi samo ako je ukljuena podrka za kratke oznake. Da biste ukljuili podrku za kratke oznake, koristite funkciju short_tags(), upotrebite stavku short_tag_open u datoteci za podeavanje PHP-a ili prevedite PHP pomou opcije -enable-short-tags. Oznake u stilu jezika ASP moi ete da koristite samo ako je u konfiguracionoj datoteci ukljuena opcija asp_tags. Vie informacija o prevo?enju PHP-a potraite u poglavlju "Prevo?enje i instaliranje jezika PHP4" i dodatku D "Opcije za podeavanje". Jezik PHP je po sintaksi veoma slian jeziku C. Na primer, naredbe se razdvajaju znakom taka i zarez. Oznaka ?> predstavlja implicitan kraj iskaza, tako da su sledei primeri ekvivalentni: Listing 2: Razliiti primeri kraja iskaza
<?php echo "Test, test...<br>"; ?> <?php echo "Test, test...<br>" ?>

Komentari se u jeziku PHP oznaavaju kao u jezicima C i C++ ili u naredbama komandnih okruenja Unixa. Jednoredni komentari se zavravaju na kraju reda ili na kraju tekueg bloka PHP koda, u zavisnosti od toga ta prvo sledi. Nemojte ugne?ivati vieredne komentare ija je sintaksa ista kao u jeziku C. Listing 3: Komentari
<?php echo "Zdravo, svete!<br>"; // Ovo je komentar u jednom redu // u stilu jezika C++ /* Ovo je blok komentara u vie redova. */

echo "Zdravo, jo jednom.<br>";# Ovo je komentar u stilu # komandnih okruenja Unixa ?> <?php /* Sledei red e ispisati, "Ovo nee ispisati nita." */ ?> Ovo nee ispisati <?php # echo "neto"; ?> nita.<br> <?php /* echo "Ovo je problem."; /* Ovakav ugne?eni komentar e izazvati problem */ */

Tipovi

Jezik PHP podrava sledee tipove: realne brojeve u pokretnom zarezu, cele brojeve, znakovne nizove, nizove i objekte. Tip promenljive se najee odre?uje na osnovu konteksta promenljive pa programer ne mora da ga direktno zadaje. Ovu injenicu treba dobro zapamtiti jer indirektno pretvaranje tipova moe izazvati neobine greke koje se teko pronalaze. Na primer, sledei iskaz je ispravan i prikazae broj 9:
print( 3 * "3 mala praseta" );

Da bi olakao upravljanje tipovima, jezik PHP sadri funkcije gettype() i settype() kao i specifine funkcije za proveravanje tipa kakve su is_integer() i is_array() . U dodatku A nai ete detaljan opis ovih funkcija. Svaki od tipova promenljivih (osim objekata) objanjen je u narednim odeljcima. O objektima u jeziku PHP bie vie rei kasnije u ovom poglavlju.

Brojevi: celi i u pokretnom zarezu


Cele brojeve moete da predstavite u decimalnom, oktalnom ili heksadecimalnom zapisu. Brojeve u pokretnom zarezu moete da predstavite u standardnom ili naunom zapisu. Sintaksa svakog od ovih zapisa prikazana je u narednom listingu. Listing 4: Predstavljanje brojeva
<?php $int1 = 523; // decimalan prikaz $int2 = -523; // decimalan prikaz negativnog broja $int3 = 01013; // oktalan prikaz broja 523 $int4 = 0x20B; // heksadecimalni prikaz broja 523 $float1 = 523.197; // standardan zapis broja u pokretnom // zarezu $float2 = 5.23197e2; // nauni zapis broja u pokretnom zarezu /* Ispisujemo sve brojeve. Prikazuje "523, -523, 523, 523, 523.197, 523.197". */ print( "$int1, $int2, $int3, $int4, $float1, $float2<br>" ); ?>

Znakovni nizovi
Znakovni nizovi (engl. strings) okruuju se u jeziku PHP znakom navoda (") ili polunavodnikom ('). Ovako zadati znakovni nizovi tumae se na dva naina. Ako je znakovni niz pod navodnicima, promenljive unutar znakovnog niza bie zamenjene vrednostima. Obrnuta kosa crta (\) pod navodnicima se koristi za zadavanje specijalnih znakova (izlaznih sekvenci) prikazanih u tabeli 2.1.
Tabela 2.1 Izlazne sekvence u znakovnim nizovima pod navodnicima Znak Znaenje \n Nov red \r Povratak u prvu kolonu (carriage-return) \t Horizontalni tabulator \\ Obrnuta kosa crta

\" \$

Znak navoda Znak za dolar

Unutranje promenljive u znakovnim nizovima pod polunavodnicima se ne zamenjuju svojim vrednostima. Jedine vaee izlazne sekvence u znakovnim nizovima pod polunavodnicima jesu obrnuta kosa crta (\\) i polunavodnik (\'). Ove izlazne sekvence omoguavaju da polunavodnici i obrnute kose crte budu predstavljene unutar takvih znakovnih nizova. Znakovne nizove moete da nadovezujete pomou operatora taka (.). Vie podataka o tome nai ete u odeljku ovog poglavlja koji se bavi operatorima. Kao u programiranju na jeziku C, pojedinim znakovima iz znakovnog niza mogue je pristupiti preko indeksa. Listing 5: Primeri znakovnih nizova
<?php $aStr1 = "Ovo je jednostavan znakovni niz."; print( "$aStr1<br>" ); $aStr2 = "Pera"; print( "$aStr2<br>" ); $aStr3 = "Moje ime je $aStr2"; // $aStr3 = "Moje ime je Pera" print( "$aStr3<br>" ); $aStr4 = "Moje ime je \$aStr2"; // $aStr4 = "Moje ime je $aStr2" print( "$aStr4<br>" ); $aStr5 = 'Ne zamenjuj $aStr2'; // $aStr5 = "Ne zamenjuj $aStr2" print( "$aStr5<br>" ); // prints "Moje ime je Pera i Moje ime je $aStr2" print( "$aStr3" . " i " . "$aStr4" ); ?>

Zbog "labave" prirode tipova u jeziku PHP, promenljive mogu da menjaju tip u zavisnosti od konteksta. Broj je mogue implicitno pretvoriti u znakovni niz, kada se koristi operator znakovnog niza, dok je znakovni niz mogue pretvoriti u broj kada je potreban numeriki iskaz. Kada PHP proverava znakovni niz da bi ga pretvorio u broj, on koristi sledea pravila: Ako znakovni niz poinje ispravnim numerikim podacima, ti podaci predstavljaju vrednost koja e se koristiti. Ako znakovni niz ne poinje ispravnim numerikim podacima, vrednost je nula (0). Ako ispravan numeriki podatak sadri taku, znak E ili e, vrednost e biti broj u pokretnom zarezu. U suprotnom, bie ceo broj. Ispravan numeriki podatak poinje opcionim predznakom iza kog sledi jedna ili vie cifara, opcioni decimalni zarez i opcioni eksponent. Eksponent se sastoji od slova e ili E i jedne ili vie cifara. Listing 6: Primeri implicitnog pretvaranja znakovni niz/broj
<?php $aVar = 123; print( "\$aVar = $aVar, tip = " . gettype( $aVar ) . "<br>" ); $aVar2 = $aVar . " implicitno pretvoren u znakovni niz"; print( "\$aVar2 = $aVar2, tip = " . gettype( $aVar2 ) . "<br>" ); $aVar3 = $aVar2 + 1; // implicitno pretvoren u ceo broj print( "\$aVar3 = $aVar3, tip = " . gettype( $aVar3 ) . "<br>" ); $aVar3 = $aVar2 * 1.1; // implicitno pretvoren u broj // u pokretnom zarezu print( "\$aVar3 = $aVar3, tip = " . gettype( $aVar3 ) . "<br>" ); $aNotNumber = "abc"; $aVar4 = $aNotNumber * 1; // pokuaj pretvaranja u broj, vraa 0 print( "\$aVar4 = $aVar4, tip = " . gettype( $aVar4 ) . "<br>" ); $aIsNumber = "3 praseta"; $aVar5 = $aIsNumber + 1; // pretvara $aIsNumber u ceo broj 3 print( "\$aVar5 = $aVar5, type = " . gettype( $aVar5 ) . "<br>" ); ?>

Nizovi
Nizovi (engl. arrays) ponaaju se u jeziku PHP kao indeksirani nizovi (vektori) i kao he-tabele (asocijativni nizovi). PHP podrava viedimenzionalne nizove. Zbog jedinstvene realizacije nizova u jeziku PHP, viedimenzionalne nizove moete da indeksirate numeriki po jednoj dimenziji i asocijativno po drugoj. Nizove moete da pravite pomou funkcija list() ili array() ili direktnim zadavanjem vrednosti. Dodatak A sadri opis svih funkcija jezika PHP koje moete da upotrebite za rad sa nizovima. Elementi jednodimenzionalnog niza mogu biti zamenjeni vrednostima u znakovnim nizovima kao i ostale promenljive. U viedimenzionalnim nizovima sve promenljive moraju da se smeste u vitiaste zagrade. U sledeem listingu dati su primeri razliitih tipova nizova. Listing 7: Inicijalizovanje i korienje nizova
<?php // Direktno zadavanje jednostavnog niza $a[0] = "Dragan"; $a[1] = "Jovan"; $a[] = "Pavle"; // implicitno dodat indeksom (kljuem) 2 $a[] = "Ruica"; // implicitno dodat indeksom (kljuem) 3 print( "$a[3], $a[2], $a[1], $a[0]<br>" ); // Zadavanje asocijativnog niza $color["blue"] = "#0000FF"; $color["green"] = "#00FF00"; $color["red"] = "#FF0000"; print( "Heksadecimalna vrednost crvene boje je". "{$color['red']}<br>" ); // Zadavanje istog jednostavnog asocijativnog niza, // samo mnogo jednostavnije. $color = array( "blue" => "#0000FF", "green" => "#00FF00", "red" => "#FF0000" ); print( "Heksadecimalna vrednost zelene boje je". "{$color['green']}<br>" ); // Runo zadavanje viedimenzionalnog niza $m[0][0] = "Nula Nula"; $m[0][1] = "Nula Jedan"; print( "Vrednost \$m[0][1] je {$m[0][1]}<br>" ); // Runo zadavanje viedimenzionalnog niza $stanovnici["Beograd"][0] = "Milanovi"; $stanovnici["Beograd"][1] = "Simi"; $stanovnici["Beograd"][2] = "Radunovi"; $stanovnici["Novi Sad"][0] = "Markovi"; $stanovnici["Novi Sad"][1] = "Pajnik"; $stanovnici["Novi Sad"][2] = "Zdravkovi"; print( "\$stanovnici['Beograd'][0] = {$stanovnici['Beograd']" "[0]}<br>" ); ?>

Promenljive i konstante

Promenljive se u jeziku PHP oznaavaju oznakom dolar ($) iza koje sledi ime promenljive. U imenima promenljivih razlikuju se velika i mala slova. Imena promenljivih moraju da poinju slovom ili podvlakom iza koje slede slova, brojevi ili podvlake. U imenima promenljivih, pod slovima se podrazumevaju znakovi od a do z, od A do Z ili neki drugi ASCII znak iz opsega od 127 do 255 (od 0x7f do 0xff). Listing 8: Primeri imena promenljivih
<?php $variable1 = "Goran"; $variable2 = "Markovi"; // ispisuje "Goran, Markovi" print( "$variable1, $variable2<br>" ); $1variable = 123; // pogreno ime promenljive

$_test = "test"; // ispravno, poinje podvlakom $_test = "test2"; // ispravno, ima ASCII kd 128 ?>

Promenljivama se vrednost moe dodeliti preko vrednosti ili preko reference. Kada je promenljivoj zadata vrednost preko vrednosti, cela vrednost iz originalnog izraza dodeljuje se odredinoj promenljivoj. Nakon dodele, originalna promenljiva je nezavisna tako da promena vrednosti jedne promenljive nee imati uticaja na drugu. Kada se promenljivoj vrednost zadaje preko reference, nova promenljiva ukazuje na originalnu promenljivu. Promena jedne promenljive u ovom sluaju uticae na drugu promenljivu. Da biste promenljivoj dodelili vrednost preko reference, ispred imena promenljive dodajte znak &. Listing 9: Pridruivanje promenljivih
<?php $variable1 = "Goran"; $variable2 = $variable1; // Dodela preko vrednosti print( "$variable1, $variable2<br>" ); // Ispisuje "Goran, // Goran" $variable2 = "Markovi"; print( "$variable1, $variable2<br>" ); // "Goran, Markovi" $variable3 = &$variable1; // Dodela preko reference print( "$variable1, $variable3<br>" ); // Ispisuje "Goran, // Goran" $variable3 = "Katarina"; print( "$variable1, $variable3<br>" ); // "Katarina, Katarina" ?>

Osim korisnikih promenljivih, jezik PHP prua nekoliko ve definisanih promenljivih koje mogu da se koriste u bilo kom skriptu. Spisak dostupnih unapred definisanih promenljivih zavisi od konteksta skripta (na primer, da li se izvrava sam ili preko Web servera), verzije jezika PHP i tipa Web servera (ako se koristi). Poto unapred definisane promenljive zavise od ovih nekoliko faktora, neke od njih moda nee biti na raspolaganju. PHP moe da generie promenljive za kolaie i obrasce prosle?ene metodom POST ili GET. Vie podataka o ovim promenljivama pronai ete u poglavlju 3, "Obrasci i kolaii". Naredni odeljci sadre podskup promenljivih koje vam stoje na raspolaganju ako koristite PHP4 na serveru Apache 1.3.11. Da biste videli spisak promenljivih koje moete da koristite u svom okruenju, upotrebite funkciju phpinfo(). Potpuniji skup prethodno definisanih promenljivih pronai ete u dodatku B. Tabela 2.2 sadri podskup promenljivih okruenja servera Apache. Tabela 2.3 prikazuje neke od promenljivih okruenja, a tabela 2.4 sadri neke od promenljivih koje generie PHP. Aritmetiki operatori prikazani su u tabeli 2.5. Tabela 2.6 sadri operatore nad bitovima, a tabela 2.7 operatore pore?enja. Tabela 2.8 sadri operatore uveanja i umanjenja. Na kraju, tabela 2.10 sadri operatore dodele.
Tabela 2.2 Promenljive okruenja servera Apache Promenljiva Definicija HTTP_HOST Sadraj zaglavlja Host koje je poslao ita Weba, ako postoji. Sadraj zaglavlja User Agent koje je poslao ita Weba. Ovo zaglavlje opisuje ita koji zahteva HTTP_USER_AGENT tekuu stranu, na primer, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)". Vie informacija o korienju ove promenljive potraite u poglavlju 9, "Nezavisnost od itaa". REMOTE_ADDR IP adresa korisnika koji zahteva tekuu stranu. SERVER_PROTOCOL Ime i verzija protokola kojim se strana zahteva, na primer, HTTP/1.1. Verzija CGI standarda koju server koristi; na primer, GATEWAY_INTERFACE CGI/1.1. Tabela 2.3 Sistemske promenljive okruenja Promenljiva Definicija HOSTNAME Ime servera HOSTTYPE Tip raunara na kome se izvrava server, na primer, i386 PATH Izvrna putanja servera

Unapred definisane promenljive

OSTYPE

Operativni sistem na kome se izvrava server, na primer, Linux

Tabela 2.4 Promenljive koje generie PHP Promenljiva Definicija PHP_SELF Ime datoteke sa skriptom koji se trenutno izvrava HTTP_COOKIE_VARS Asocijativni niz promenljivih koje su prosle?ene tekuem skriptu pomou HTTP kolaia HTTP_GET_VARS Asocijativni niz promenljivih koje su prosle?ene tekuem skriptu pomou metode GET HTTP_POST_VARS Asocijativni niz promenljivih koje su prosle?ene tekuem skriptu pomou metode POST Tabela 2.5 Aritmetiki operatori Operator Ime Primer Rezultat + Sabiranje $a + $b Zbir $a i $b Oduzimanje $a - $b Razlika $a i $b * Mnoenje $a * $b Proizvod $a i $b / Deljenje $a / $b Kolinik $a i $b % Modulo $a % $b Ostatak deljenja $a sa $b Tabela 2.6 Operatori nad bitovima Operator Ime Primer Rezultat & Konjunkcija $a & $b Rezultat sadri bitove 1 na mestima gde su 1 i u $a i $b | Disjunkcija $a | $b Rezultat sadri bitove 1 na mestima gde su postavljeni na 1 u $a ili $b ili u oba ^ Iskljuiva disjunkcija $a ^ $b Rezultat sadri bitove 1 na mestima gde su 1 u $a ili $b ali ne i u oba istovremeno ~ Negacija ~$a Bitove koji su prethodno bili 1 postavlja na 0 i obrnuto << Pomeraj ulevo $a << $b Pomera sadraj promenljive $a ulevo za $b mesta >> Pomeraj udesno $a >> $b Pomera sadraj promenljive $a udesno za $b mesta Tabela 2.7 Operatori pore?enja Operator Ime Primer Rezultat == Jednako $a == $b Tano, ako je $a jednako $b === Identino $a === $b Tano, ako je $a jednako $b i ako su istog tipa != Razliito $a != $b Tano, ako $a nije jednako $b < Manje od $a < $b Tano, ako je $a manje od $b > Vee od $a > $b Tano, ako je $a vee od $b <= Manje ili jednako $a <= $b Tano, ako je $a manje od, ili jednako $b >= Vee ili jednako $a >= $b Tano, ako je $a vee od, ili jednako $b Tabela 2.8 Operatori porasta i opadanja Operator/primer Ime Rezultat $a++ Sufiksno uveanje Vraa vrednost $a i zatim je poveava za jedan ++$a Prefiksno uveanje Poveava $a za jedan i zatim vraa novu vrednost $a-Sufiksno umanjenje Vraa vrednost $a i zatim je smanjuje za jedan --$a Prefiksno umanjenje Smanjuje $a za jedan i zatim vraa novu vrednost Tabela 2.9 Logiki operatori Operator Ime Primer and Konjunkcija $a and $b or Disjunkcija $a or $b xor Iskljuiva disjunkcija $a xor $b ! Negacija !$a && Konjunkcija $a && $b || Disjunkcija $a or $b Tabla 2.10 Operatori dodele Operator Primer Rezultat Rezultat Iskaz je taan ako su tani $a i $b Iskaz je taan ako je taan $a ili $b Iskaz je taan ako je taan $a ili $b ali ne i oba Iskaz je taan ako $a nije taan Iskaz je taan ako su tani $a i $b Iskaz je taan ako je taan $a ili $b

= += -= *= /= .= %= |= &= ^= <<= >>=

Vrednost $b dodeljuje se promenljivoj $a. Promenljivoj $a dodeljuje se vrednost ($a + $b). Isto kao $a = $a + $b. Promenljivoj $a dodeljuje se vrednost ($a - $b). Isto kao $a = $a - $b. Promenljivoj $a dodeljuje se vrednost ($a * $b). Isto kao $a = $a * $b. Promenljivoj $a dodeljuje se vrednost ($a / $b). Isto kao $a = $a / $b. Promenljivoj $a dodeljuje se vrednost ($a . $b). Isto kao $a = $a . $b. Promenljivoj $a dodeljuje se vrednost ($a % $b). Isto kao $a = $a % $b. Promenljivoj $a dodeljuje se vrednost ($a | $b). Isto kao $a = $a | $b. Promenljivoj $a dodeljuje se vrednost ($a & $b). Isto kao $a = $a & $b. Promenljivoj $a dodeljuje se vrednost $a ^= $b ($a ^ $b). Isto kao $a = $a ^ $b. Promenljivoj $a dodeljuje se vrednost $a <<= $b ($a << $b). Isto kao $a = $a << $b. Promenljivoj $a dodeljuje se vrednost $a >>= $b ($a >> $b). Isto kao $a = $a >> $b.

$a = $b $a += $b $a -= $b $a *= $b $a /= $b $a .= $b $a %= $b $a | = $b $a &= $b

Opsezi promenljivih

Sve PHP promenljive po pravilu imaju jedan opseg koji obuhvata ukljuene (engl. included) i zahtevane (engl. required) datoteke. Ako se koriste funkcije koje je korisnik definisao, u upotrebu se uvodi lokalni opseg funkcije. Globalne promenljive se moraju deklarisati unutar funkcije da bi mogle da se koriste. Osim toga, PHP podrava statike promenljive unutar funkcija kako bi omoguio lokalnim promenljivama da ouvaju vrednost izme?u poziva. Listing 10: Opsezi promenljivih
<?php $aGlobal1 = "Ovo je test"; /* Ukljuuje drugu PHP datoteku. Prethodna promenljiva, $aGlobal1, bie dostupna u ukljuenoj datoteci. */ include( "example10_inc.php" ); function DoPrint( ) { /* Sledei kd ispisae samo <br> jer promenljiva $aGlobal1 nema vrednost unutar te funkcije. To bi moglo dovesti i do upozorenja o nedefinisanoj promenljivoj. */ print( "$aGlobal1<br>" ); } DoPrint(); function DoPrint2( ) { global $aGlobal1; /* Sledei kd ispisae promenljivu jer je deklarisana kao globalna. */ print( "$aGlobal1<br>" ); } DoPrint2(); function StaticFunc( ) { static $aVal = 0; print( "$aVal<br>" ); $aVal++; } // Sledei kd ispisae 0, zatim 1

StaticFunc(); StaticFunc(); ?> --- Sadraj datoteke, example10_inc.php3: --<?php print( "$aGlobal1<br>" ); ?>

Konstante

PHP ima nekoliko ve definisanih konstanti i dozvoljava korisnicima da zadaju dodatne. Potpun spisak konstanti potraite u dodatku B. Da biste zadali konstantu, moete da koristite funkciju define(). PHP konstante nisu makroi u stilu jezika C pa zato moraju biti skalarne vrednosti. Listing 11: Konstante
<?php define( "aString", "Ovo je znakovna konstanta" ); define( "aNumber", 1 ); print( "Ima " . aNumber . " definisanih konstanti.<br>" ); print( "Vrednost konstante je '" . aString . "'<br>" ); ?>

Operatori i prioritet operatora

Jezik PHP sadri skup operatora koji su vrlo slini onima iz jezika C/C++. Tabele od 2.5 do 2.10 sadre kratak opis operatora koji stoje na raspolaganju. Osim operatora koji su navedeni u tabelama postoje i drugi, ali se oni tee svrstavaju u kategorije. Ternarni operator pore?enja iz jezika C, koji se oznaava sa ?, postoji i u jeziku PHP. Iskaz $aVrednost=(izraz1) ? (izraz2) : (izraz3) dodeljuje vrednost izraz2 promenljivoj $aVrednost ako je izraz1 taan. U suprotnom, vrednost promenljive $aVrednost bie izraz3. Izvrni operator oznaava se apostrofom (`), slino kao u drugim programskim jezicima. Iskazi smeteni izme?u apostrofa izvravaju se na serveru i njihov rezultat moe biti pridruen promenljivoj. PHP sadri i operator za kontrolu greaka, @. Kada ovaj operator prethodi PHP iskazu, spreava se generisanje svih poruka o grekama. Ako je ukljueno svojstvo track_errors, ovaj operator omoguava bolju obradu greaka. Kada je svojstvo track_errors ukljueno, sve poruke o grekama ije je pojavljivanje spreeno operatorom @ bie sauvane u globalnoj promenljivoj $php_errormsg. Vrednost ove promenljive menja se sa svakom novom grekom, tako da njenu vrednost treba proveriti to pre da bi greka bila pravilno obra?ena. Listing 12: Primeri nekih operatora
<?php $aNum1 = 1; $aNum2 = 2; $aVal = ( $aNum1 == $aNum2 ) ? "Promenljive su jednake" : "Promenljive su razliite"; print( "$aVal<br>" ); // Ispisuje "Promenljive su razliite" $aVal = ( 1 == "1" ) ? "Promenljive su jednake" : "Promenljive su razliite"; print( "$aVal<br>" ); // Ispisuje "Promenljive su jednake" $aVal = ( 1 === "1" ) ? "Promenljive su identine" : "Promenljive nisu identine"; print( "$aVal<br>" ); // Ispisuje "Promenljive nisu identine" /* Naredni kd zadaje promenljivoj $aListing sadraj tekueg serverskog direktorijuma, zatim pretvara nove redove u oznake <br> da bi tekst bio formatiran i zatim tampa rezultate */ $aListing = 'ls -l'; // naredba 'ls' koristi se na veini *nix // platformi $aFmtList = nl2br( $aListing );

print( "<br>Sadraj direktorijuma:<br><b>$aFmtList</b><br>" ); ?>

Kontrola toka programa


Jezik PHP podrava standardne iskaze za kontrolu toka, na primer, if, petlje while i for. Programerima koji koriste jezik C sintaksa ovih iskaza bie poznata. Osim toga, jezik PHP podrava dve funkcije za ukljuivanje izvornih datoteka: include() i require().

if, else, elseif


Osnovni element jezika, iskaz if, kontrolie tok programa grananjem na uslovne iskaze. Listing 13: Primer u kome se koriste iskazi if, else i elseif
<?php if ( 1 < 2 ) print( "Ovo e biti ispisano.<br>" ); else print( "Ovo nee biti ispisano.<br>" ); $aValue = 2; if ( $aValue == 1 ) { // Vitiastim zagradama izdvaja se blok sa iskazom // Ovo je potrebno samo u blokovima koji sadre vie iskaza print( "\$aValue == 1<br>" ); } elseif ( $aValue == 2 ) { print( "\$aValue == 2<br>" ); } elseif ( $aValue == 3 ) { print( "\$aValue == 3<br>" ); } else { print( "\$aValue nije 1, 2 ni 3<br>" ); } ?>

while
Najjednostavniji primer petlje u jeziku PHP jeste petlja while. Ona se u ovom jeziku ponaa isto kao i u svim ostalim viim programskim jezicima.

do..while

Slino kao i petlja while, petlja do..while proverava stanje petlje nakon prvog izvravanja iskaza petlje. Ovaj postupak osigurava da se petlja izvri bar jedanput. Listing 14: Primer petlji while i do..while
<?php print( "Brojanje pomou petlje <b>while</b>.<br>" ); $nIndex = 0; // Ispisuje brojeve od 0 do 9 while ( $nIndex < 10 ) { print( "$nIndex<br>" ); $nIndex++; } print( "Brojanje unazad pomou petlje <b>do..while</b>.<br>" ); // Ispisuje brojeve od 10 do 1 do {

print( "$nIndex<br>" ); $nIndex--; } while ( $nIndex > 0 ); ?>

for
Petlja for je najsloeniji iskaz za petlju u jeziku PHP, ali je po sintaksi ekvivalentna iskazu for u jeziku C. Sintaksa je kao u narednom primeru:
for (izraz1; izraz2; izraz3; ) iskaz

Izraz1 se izraunava jedanput na poetku petlje. Izraz2 se izraunava na poetku svakog ponavljanja petlje. Ako je rezultat taan (true), petlja se nastavlja a iskazi izvravaju. Ako je drugi izraz prazan, on se implicitno ocenjuje kao taan. Na kraju svakog prolaska kroz petlju izraunava se izraz3. Bilo koji od ova tri izraza moe biti prazan. Listing 15: Primer petlje for
<?php // Ispisuje brojeve od 0 do 9 for ( $nIndex = 0; $nIndex < 10; $nIndex++ ) { print( "$nIndex<br>" ); } /* $nIndex sada ima vrednost 10. Ovaj primer pokazuje da bilo koji od tri izraza moe biti prazan kada se koristi u petlji. Ovo naruava itljivost koda. Sledei kd ispisuje brojeve od 10 do 1 */ for ( ; $nIndex > 0; $nIndex-- ) { print( "$nIndex<br>" ); } ?>

foreach

Iskaz foreach je prikladan mehanizam za prolazak kroz niz. Perl, VBScript i drugi jezici imaju sline iskaze. Jezik PHP podrava dva naina zadavanja ove petlje: Prvi nain formira petlju nad datim nizom. Sa svakim ponavljanjem petlje, vrednost tekueg elementa niza pridruuje se promenljivoj dok se pokaziva niza pomera. Drugi nain radi to isto i pridruuje klju tekueg elementa niza promenljivoj klju. Listing 16: Primer upotrebe iskaza foreach
<?php $aArray = array( "Crveno", "Zeleno", "Plavo" ); foreach( $aArray as $aValue ) { print( "Tekua vrednost je $aValue<br>" ); } $aColorArray = array( "Crveno" => "#FF0000", "Zeleno" => "#00FF00", "Plavo" => "#0000FF" ); foreach( $aColorArray as $aKey => $aValue ) { print( "Heksadecimalna vrednost $aKey je $aValue<br>" ); } ?> foreach( niz as promenljiva) iskaz foreach( niz as klju => promenljiva) iskaz

switch

Iskaz switch pojednostavljuje proveru vie uslova. ;esto se koristi umesto sloenog iskaza if..elseif..else kada kd sadri iskaz elseif na nekoliko mesta. Sintaksa i realizacija iskaza switch u jeziku PHP ista je kao u jeziku C. Jedno od lepih svojstava jezika PHP je i to to kao iskaz switch moete da koristite znakovni niz. Programerima koji su navikli na jezik Delphi/Pascal najtee e biti da zapamte iskaz break. Ponekad je korisno isputanje ovog iskaza. Sledei primer pokazuje neke od naina upotrebe iskaza switch. Listing 17: Primeri sa iskazom switch
<?php $nIndex = 2; // Najjednostavniji iskaz switch switch ( $nIndex ) { case 0: print( "nula<br>" ); break; case 1: print( "jedan<br>" ); break; case 2: print( "dva<br>" ); break; } // Koristite 'default' za podrazumevani sluaj $nIndex = 17; switch ( $nIndex ) { case 0: print( "nula<br>" ); break; case 1: print( "jedan<br>" ); break; case 2: print( "dva<br>" ); break; default: print( "Ni nula, ni jedan, ni dva<br>" ); break; } // Uslov moe biti i znakovni niz $aColor = "plava"; switch( $aColor ) { case "crvena": print( "#FF0000<br>" ); break; case "zelena": print( "#00FF00<br>" ); break; case "plava": print( "#0000FF<br>" ); break; default: print( "druga<br>" ); break; } /* Ako zaboravite iskaz break, po ispunjenju uslova bie izvreni svi iskazi. Ako je $nIndex jednako 0, sva tri iskaza za tampanje bie izvrena. Ako je $nIndex jednako 1, poslednja dva iskaza za tampanje bie izvrena. */ $nIndex = 0; switch ( $nIndex ) { case 0:

print( "nula<br>" ); case 1: print( "jedan<br>" ); case 2: print( "dva<br>" ); } /* U nekim situacijama je korisno izostaviti iskaz break */ $aColor = "Crvena"; switch( $aColor ) { case "crvena": case "Crvena": // Naredni kd e ispisati poruku ako je $aColor // jednako "red" ili "Red" print( "#FF0000<br>" ); break; case "zelena": case "Zelena": print( "#00FF00<br>" ); break; case "plava": case "Plava": print( "#0000FF<br>" ); break; default: print( "druga<br>" ); break; } ?>

break i continue

Jezik PHP sadri iskaze break i continue u stilu jezika C, koji pruaju dodatnu kontrolu nad razliitim iskazima za petlje. Oba iskaza prihvataju opcioni numeriki argument koji zadaje broj ugne?enih kontrolnih struktura iza kojih sledi prekid ili nastavak izvravanja. Iskaz break prekida izvravanje tekue kontrolne strukture (petlje ili iskaza switch). Iskaz continue se koristi samo u petljama. On izaziva preskakanje ostatka tekueg koraka i prelazak na poetak sledeeg prolaska kroz petlju. Iskazi break i continue najee se koriste u duboko ugne?enim petljama. U jednostavnim petljama obino su dovoljni jednostavni uslovni iskazi. Listing 18: Primeri upotrebe iskaza break i continue
<?php $aArray = array( 4, 5, 15, 12, 7, 3, 20, 11, 31 ); $aCurMax = 17; /* Proverava da li u polju postoji vrednost koja je vea od tekue vrednosti. Samo proveravamo da li postoji vrednost vea od tekue. To ne znai da pronalazimo najveu vrednost u polju. */ foreach( $aArray as $aValue ) { /* Rezultat e biti TRUE kada vrednost dosegne 20. Zbog prekida, druge vrednosti u polju posle 20 nee biti proverene. */ if ( $aValue > $aCurMax ) { $aCurMax = $aValue; break; // moglo je i 'break 1;' }

} // Ispisuje "Tekui maksimum je 20" print( "Tekui maksimum je $aCurMax<br>" ); // Ispisuje neparne brojeve od 0 do 20 $nIndex = 0; for ( $nIndex = 0; $nIndex < 20; $nIndex++ ) { if ( ( $nIndex % 2 ) == 0 ) continue; // Opciono, 'continue 1;' print( "$nIndex<br>" ); } ?>

PHP prua alternativnu sintaksu kontrolnih struktura if, while, for i switch. Za svaku od tih struktura osnovni oblik alternativne sintakse zamenjuje otvorenu zagradu dvotakom (:) i zatvorenu zagradu iskazima endif, endwhile, endfor ili endswitch. Kada piete velike skriptove u okviru HTML koda, alternativna sintaksa je korisna jer jasno oznaava kraj kontrolne strukture. Listing 19: Primer upotrebe alternativne sintakse u HTML dokumentu
<html> <head> <title>Primer 19</title> </head> <body> <!-- Koristi PHP za izradu liste --> <form action="nekastrana.phtml" method="post"> <table> <tr> <td> Izaberite godinu kada ste ro?eni: </td> <td> <select name="BirthYear" size="1"> <?php /* Generiite oznake za godine od 1920. do 2000. obrnutim redom */ $aCurYear = 2000; while( $aCurYear >= 1920 ): ?> <option value="<?php print( $aCurYear ); ?>"> <?php print( $aCurYear ); ?> </option> <?php $aCurYear--; endwhile; /* Ako se izme?u iskaza while i endwhile nalazi mnogo vie teksta, moda e biti teko pronai zavrni znak ; (taka i zarez) ukoliko se koristi regularna sintaksa. */ ?> </select> </td> </tr> </table> </form> </body> </html>

include i require

Jezik PHP ima dva mehanizma za ukljuivanje spoljanjih datoteka: include() i require(). Iskaz include() je regularna funkcija PHP-a. Iskaz require() je posebna jezika konstrukcija ija upotreba ima nekoliko ogranienja. U oba sluaja, kada je datoteka ukljuena pomou jednog od ova dva iskaza, obrada prelazi iz

reima PHP u reim HTML na poetku odredine datoteke. Interpretator se vraa u PHP reim na kraju ukljuene datoteke. To znai da sav kd u odredinoj datoteci, koji treba da bude izvren kao PHP skript, mora biti ukljuen unutar vaeih poetnih i zavrnih oznaka jezika PHP. Vrednost funkcije include() proverava se prilikom svakog njenog pojavljivanja u kodu. Ona moe da bude deo petlji ili uslovnih iskaza. To znai da datoteke ili grupe datoteka mogu biti uslovno ukljuene pomou petlji. Funkcija include() dozvoljava da odredina datoteka zada povratnu vrednost koju je mogue pridruiti promenljivoj. Obrada datoteke u iskazu include() prekida se pri nailasku na iskaz return. Iskaz require() razlikuje se od iskaza include() po tome to ne moe biti deo nijedne kontrolne strukture. To znai da se datoteke ne mogu uslovno ukljuiti pomou iskaza require(). Iskaz e biti izvren jedanput ak i ako se nalazi unutar petlje, ili ako se nalazi unutar uslovnog iskaza koji nije ispunjen. Datoteka u iskazu require() tako?e ne moe vratiti vrednost. Ako pokuate da u iskaz require() vratite vrednost, doi e do greke.

Funkcije

Jezik PHP omoguava korisnicima da definiu funkcije. One ne moraju da budu deklarisane pre upotrebe. Podrana su i sledea svojstva koja se odnose na funkcije: promenljiva imena funkcija, promenljivi broj argumenata, podrazumevani argumenti, prosle?ivanje argumenata po vrednosti i po referenci. Unutar bloka funkcije dozvoljeno je izvravanje bilo kog PHP koda, ukljuujui i kd koji poziva drugu funkciju. Ova osobina omoguava upotrebu rekurzivnih funkcija. PHP ne dozvoljava preklapanje imena funkcija ni ponitavanje definicije ili redefinisanje funkcije. Argumenti se funkciji podrazumevano prosle?uju po vrednosti. Da biste vrednost prosledili po referenci, ispred imena promenljive dodajte znak &. Kada koristite podrazumevane argumente, oni moraju da se nalaze desno od argumenata koji nisu podrazumevani. Za liste argumenata promenljive duine dostupne su funkcije func_num _args(), func_get_arg() i func_get_args() koje vraaju podatke o prosle?enim argumentima. U narednom primeru prikazana je opta upotreba funkcija u jeziku PHP. Listing 20: Primeri funkcija koje je korisnik definisao
<?php // Osnovna funkcija. function ReturnSum( $a, $b ) { return $a + $b; } // Prosle?ivanje putem reference function StringAppend( &$BaseString, $AddString ) { // Poto je prosle?ena po referenci, vrednost // promenljive $BaseString bie promenjena // izvan opsega ove funkcije. $BaseString .= $AddString; } // Podrazumevane vrednosti /* Ovu funkciju moe pozvati: PrintAnchorTag( "href", "text" ); ili PrintAnchorTag( "href", "text", "target" ); */ function PrintAnchorTag( $aHREF, $aText, $aTarg = "" ) { if ( $aTarg == "" ) { print( "<a href=\"$aHREF\">$aText</a>" ); } else { print( "<a href=\"$aHREF\" target=\"$aTarg\">$aText</a>" ); } } // lista argumenata promenljive duine function PrintEverything( ) {

$aNumArgs = func_num_args(); for ( $nIndex = 0; $nIndex < $aNumArgs; $nIndex++ ) { $aArgVal = func_get_arg( $nIndex ); print( "Argument $nIndex: $aArgVal<br>" ); } } print( "ReturnSum( 3, 5 ): " . ReturnSum( 3, 5 ) . "<br>" ); $aString = "Marija je imala "; StringAppend( $aString, "ovicu" ); print( "$aString<br>" ); // prints "Marija je imala ovicu" PrintAnchorTag( "primer10.phtml", "Pogledajte ponovo primer 10" ); print( "<br>" ); PrintAnchorTag( "primer10.phtml", "Ponovo pogledajte primer 10 u novom prozoru", "_blank" ); print( "<br>" ); print( "Poziva funkciju PrintEverything( 1, 2, 3, 4, 5 ):<br>" ); PrintEverything( 1, 2, 3, 4, 5 ); ?>

Objekti i klase

PHP podrava izradu klasa sintaksom koja je slina onoj iz jezika C++. PHP podrava i osnovne primene objekata, to je dovoljno za upotrebu u mnogim aplikacijama za Web. Podrano je jednostruko nasle?ivanje, ali ne i viestruko. Konstruktor klase postoji, ali ne i destruktor. PHP podrava (i zahteva) pokaziva $this unutar klasa koji e pokazivati na lanice promenljive i metode. Sledei primeri prikazuju izradu klasa u jeziku PHP. Kasnije u knjizi, pronai ete jo primera. Listing 21: Primeri upotrebe klasa u jeziku PHP
<?php // Pravimo jednostavnu klasu. class ShoppingBasket { var $fItems; var $fCurValue; /* Ovo je konstruktor klase jer ima isto ime kao i klasa. Kao i u jeziku C++, konstruktor klase u jeziku PHP moe imati argument. U ovom sluaju argument je poetna vrednost stvari koje je korisnik kupio, verovatno iznos obavezne potarine. */ function ShoppingBasket( $aInitialValue = 0.0 ) { $this->fCurValue = $aInitialValue; } // Dodajemo kupljene stavke. function AddItem( $aName, $aValue, $aQuantity = 1 ) { $this->fItems[$aName]["Quantity"] += $aQuantity; $this->fItems[$aName]["Value"] = $aValue; $this->fCurValue += $aValue * $aQuantity; return True; } function RemoveItem( $aName, $aQuantity = 1 ) { // Brie stavke ako // ih trenutno ima na raspolaganju if ( $this->fItems[$aName]["Quantity"] > $aQuantity ) { $this->fItems[$aName]["Quantity"] -= $aQuantity; $this->fCurValue -= $this->fItems[$aName]["Value"] * $aQuantity;

} else { return False; } } function PrintBasket( ) { if ( count( $this->fItems ) > 0 ) { print( "Sadraj korpe:<blockquote>" ); foreach( $this->fItems as $aKey => $aValue ) { print( "{$aValue['Quantity']} $aKey<br>" ); } print( "Total value: $" . number_format( $this->fCurValue, 2 ) ); print( "</blockquote>" ); print( "<br>" ); } else { print( "<i>Korpa je prazna</i><br><br>" ); } } } /* Pravi novu instancu klase ShoppingBasket. Dodaje neke stavke, brie neke stavke i svaki put ispisuje stavke koje je korisnik izabrao. */ $aBasket = new ShoppingBasket( 3.50 ); $aBasket->PrintBasket(); $aBasket->AddItem( "neto", 1.50 ); // Dodaje neku dranguliju. $aBasket->PrintBasket(); $aBasket->AddItem( "nita", 2.10, 6 ); // Dodaje 6 komada niega $aBasket->PrintBasket(); $aBasket->RemoveItem( "nita", 15 ); $aBasket->PrintBasket(); $aBasket->RemoveItem( "nita", 3 ); $aBasket->PrintBasket(); ?>

Pronalaenje uzoraka
PHP podrava dva tipa funkcija za pronalaenje uzoraka u tekstu (regularnih izraza). U prvi tip spadaju funkcije u stilu POSIX-a: ereg(), eregi(), ereg_replace(), eregi_ replace() i split(). Svaka od ovih funkcija kao prvi argument prihvata znakovni niz regularnog izraza. Jezik PHP koristi proirene regularne izraze POSIX-a kao to je definisano u standardu POSIX 1003.2. U direktorijumu regex distribucije jezika PHP nalaze se strane za pomo koje u potpunosti opisuju POSIX regularne izraze. Funkcije drugog tipa za pronalaenje uzoraka u tekstu kompatibilne su sa funkcijama za regularne izraze jezika Perl. Sve one poinju sa preg_. Potpun spisak i opis ovih funkcija pronai ete u dodatku A. Sintaksa regularnih izraza skoro da je ista kao i ona iz jezika Perl 5. Postoji samo nekoliko malih razlika. Tekua realizacija ovih funkcija odgovara jeziku Perl 5.005. Razlike izme?u realizacije u jeziku Perl 5.5 i realizacije u jeziku PHP potpuno su opisane na lokaciji http://www.php.net.

Saetak
Cilj ovog poglavlja je da vam ukratko prikae jezik PHP pa sam zato izbegavao da dajem savete gde, kada i kako primeniti odre?eno svojstvo ovog jezika. Samo sam naveo kd koji ilustruje sintaksu i funkcionalnost. PHP sadri sva svojstva za izradu sloenih aplikacija za Web koje se lako odravaju. Jezik PHP je dovoljno robustan za obavljanje bilo kog zadatka, ali je naroito prilago?en razvoju aplikacija za Web, to e sledea poglavlja i pokazati.

MIKRO KNJIGA - PRIKAZ KNJIGE

PHP 4 Vodi za programere


DODATAK B
Unapred definisane promenljive i konstante PHP-a

Promenljive
Spisak svih unapred definisanih promenljivih i drugih korisnih informacija potraite funkcijom phpinfo(); tu funkciju bi trebalo i inae da upotrebljavate. Ovaj spisak nije sveobuhvatan, niti je zamiljeno da bi trebalo da bude takav. To je vodi kroz razne vrste predefinisanih promenljivih kojima ete pristupati u svom skriptu.

Apacheove promenljive
Ove promenljive pravi Web server Apache. Ako koristite neki drugi Web server, nema garancije da on obezbe?uje iste promenljive; moda e neke biti izostavljene, a druge dodate. Pa ipak, veliki broj ovih promenljivih definisan je u specifikaciji standarda CGI 1.1, i njih bi trebalo da imate na raspolaganju. Imajte u vidu da e mali broj njih biti raspoloiv (ili uopte imati neko znaenje) ako PHP izvravate s komandne linije; moda ak nijedna od njih.
Promenljiva GATEWAY_INTERFACE Opis Oznaka revizije CGI specifikacije koju koristi server, poput CGI/1.1. Ime servera na kome se izvrava skript. Ako se skript izvrava na virtuelnom serveru, dobiete SERVER_NAME naziv tog virtuelnog servera. SERVER_SOFTWARE Znakovni niz za identifikaciju servera, dat u zaglavljima prilikom odgovaranja na zahtev. SERVER_PROTOCOL Ime i revizija informacionog protokola kojim je napravljen zahtev, poput HTTP/1.0 . REQUEST_METHOD Metoda zahteva upotrebljena za pristupanje stranici, poput GET , HEAD , POST i PUT . QUERY_STRING Znakovni niz upita (ako postoji) upotrebljen za pristupanje stranici. Korenski direktorijum dokumenta pod kojim se izvrava tekui skript, kako je definisan u DOCUMENT_ROOT konfiguracijskoj datoteci servera. HTTP_ACCEPT Sadraj zaglavlja Accept : tekueg zahteva, ako takvo postoji. Sadraj zaglavlja Accept-Charset: tekueg zahteva, ako takvo postoji. Primer: iso-8859-1 , * , HTTP_ACCEPT_CHARSET utf-8 . HTTP_ENCODING Sadraj zaglavlja Accept-Encoding: tekueg zahteva, ako takvo postoji. Primer: gzip . HTTP_ACCEPT_LANGUAGE Sadraj zaglavlja Accept-Language: tekueg zahteva, ako takvo postoji. Primer: en . HTTP_CONNECTION Sadraj zaglavlja Connection: tekueg zahteva, ako takvo postoji. Primer: Keep-Alive . HTTP_HOST Sadraj zaglavlja Host : tekueg zahteva, ako takvo postoji. Adresa stranice (ako postoji) koja upuuje korisnika na tekuu stranicu. Nju zadaje korisnikov HTTP_REFERER ita; ima nekih itaa koji to ne rade. Sadraj zaglavlja User_Agent : tekueg zahteva, ako takvo postoji. To je znakovni niz koji opisuje itaa; na primer, Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Izme?u ostalog, tu HTTP_USER_AGENT vrednost moete upotrebiti s funkcijom get_browser() da biste funkcionalnost svoje stranice iskrojili prema sposobnostima korisnikovog itaa. REMOTE_ADDR IP adresa s koje korisnik razgleda tekuu stranicu. REMOTE_PORT Broj ulaza koji korisnikov raunar upotrebljava za komunikaciju s Web serverom. SCRIPT_FILENAME Apsolutna putanja skripta koji se trenutno izvrava. Vrednost data stavki SERVER_ADMIN (za Apache) u konfiguracijskoj datoteci Web servera. SERVER_ADMIN Ako se skript izvrava na virtuelnom serveru, dobiete vrednost definisanu za taj virtuelni server.

SERVER_PORT SERVER_SIGNATURE PATH_TRANSLATED SCRIPT_NAME REQUEST_URI

Broj ulaza koji serverski raunar upotrebljava za komunikaciju Web servera. Podrazumevani broj ulaza je 80. Ako se koristi SSL, na primer, ova vrednost e biti jednaka zadatoj vrednosti broja bezbednog HTTP ulaza. Znakovni niz koji sadri verziju servera i ime virtuelnog servera koji se dodaju stranicama koje generie server, ako je to omogueno. Putanja tekueg skripta u sistemu datoteka (ne u odnosu na korenski dokument), poto server obavi sva preslikavanja virtuelnih u realne nazive. Sadri putanju tekueg skripta. Ovo je korisno za stranice koje hipervezama ili obrascima upuuju na same sebe. URI koji je bio dat radi pristupanja ovoj stranici; na primer, /index.html .

Promenljive okruenja
Ove promenljive se uvoze u prostor globalnih naziva PHP-a iz okruenja u kome se izvrava analizator PHPa. Mnoge od njih obezbe?uje komandno okruenje (engl. shell) pod kojim se PHP izvrava, a poto se razliiti sistemi obino izvravaju pod razliitim komandnim okruenjima, konaan spisak je nemogue napraviti. Pogledajte u dokumentaciji vaeg komandnog okruenja spisak definisanih promenljivih okruenja. Ostale promenljive okruenja ukljuuju i CGI promenljive, koje su tamo smetene bez obzira na to da li se PHP izvrava kao serverski modul ili program CGI.

PHP-ove promenljive
Ove promenljive pravi sam PHP. Promenljive $HTTP_*_VARS stoje na raspolaganju jedino ako je ukljuena opcija track_vars. to se tie jezika PHP4.0.3, track_vars je uvek ukljuena, bez obzira na podeavanje konfiguracijske datoteke. Ako je ukljuena opcija register_globals, onda e te promenljive biti dostupne i u globalnom opsegu skripta; na primer, odvojeno od nizova $HTTP_*_VARS. Ovu mogunost treba oprezno koristiti i po mogustvu iskljuiti; mada su promenljive $HTTP_*_VARS bezbedne, vrednost njihovih globalnih ekvivalenata mogu da izmene korisnikovi unosi, moda i zlonamerno. Ako ne moete da iskljuite register_globals, onda morate preduzeti sve potrebne mere predostronosti za obezbe?enje podataka koje koristite.
Promenljiva Opis Niz argumenata prosle?enih skriptu. Ako se skript izvrava na komandnoj liniji, dobija se pristup argv parametrima komandne linije u stilu C-a. Ako se pozove metodom GET, sadrava znakovni niz upita. argc Sadri broj parametara komandne linije prosle?enih skriptu (ako se skript izvrava na komandnoj liniji). Ime datoteke skripta koji se trenutno izvrava, u odnosu na korenski direktorijum. Ako se PHP izvrava PHP_SEL sa komandne linije, ova promenljiva nije dostupna. HTTP_COOKIE_VARS Asocijativni niz promenljivih prosle?enih tekuem skriptu putem HTTP kolaia. HTTP_GET_VARS Asocijativni niz promenljivih prosle?enih tekuem skriptu HTTP metodom GET. HTTP_POST_VARS Asocijativni niz promenljivih prosle?enih tekuem skriptu HTTP metodom POST. Asocijativni niz promenljivih koje sadre podatke o datotekama poslatim putem HTTP metodom HTTP_POST_FILES POST. $HTTP_POST_FILES je dostupna samo u verziji PHP4.0.0 i kasnijim. HTTP_ENV_VARS Asocijativni niz promenljivih poslatih tekuem skriptu iz roditeljskog okruenja. Asocijativni niz promenljivih koje je tekuem skriptu poslao HTTP server. Ove promenljive HTTP_SERVER_VARS odgovaraju ranije opisanim Apacheovim promenljivama.

Konstante
Konstanta Opis Ime datoteke skripta koji se trenutno analizira. Ako se koristi unutar datoteke koja je bila ukljuena (engl. __FILE__ included) ili zahtevana (engl. required), onda se daje ime ukljuene datoteke a ne ime roditeljske datoteke. Broj reda tekue datoteke skripta koja se trenutno analizira. Ako se koristi unutar datoteke koja je bila ukljuena __LINE__ ili zahtevana, onda se daje poloaj reda unutar ukljuene datoteke. PHP_VERSION Znakovni niz koji predstavlja verziju analizatora PHP koja se trenutno koristi; na primer, 3.0.8-dev . PHP_OS Ime operativnog sistema pod kojim se izvrava analizator PHP-a; na primer, Linux .

TRUE FALSE E_ERROR E_WARNING E_PARSE E_NOTICE E_ALL

Logika vrednost TRUE (razliita od 0). Logika vrednost FALSE , jednaka nuli (0). Oznaava greku koja nije greka analiziranja, a od koje se nije mogue oporaviti. Oznaava stanje kada PHP zna da neto nije u redu, ali svejedno nastavlja; sam skript moe obraditi ovo stanje. Primer bi bio neispravan regularan izraz u funkciji ereg(). Analizator se zbunio na neispravnoj sintaksi u datoteci skripta. Oporavak nije mogu. Desilo se neto to moda jeste a moda i nije greka. Izvravanje se nastavlja. Primeri ukljuuju korienje znakovnog niza bez navodnika kao he indeksa ili pristupanje promenljivoj kojoj nije zadata vrednost. Sve konstante E_* skupljene ujedno. Ako se koristi uz funkciju error_reporting(), prouzrokuje da PHP izvetava o svim primeenim problemima.

Você também pode gostar