Uvod u PHP i back-end programiranje
Uvod
PHP (skraćeno od "PHP: Hypertext Preprocessor") je skriptni jezik koji se izvršava na strani servera i omogućava: dinamičko kreiranje HTML sadržaja (u skladu sa specifičnim zahtevima klijenta), povezivanje sa bazama podataka, kao i obavljanje drugih pozadinskih zadataka na serveru.
PHP je nastao 1994. ili, bolje rečeno, u pitanju je godina kada je danski programer Rasmus Lerdorf započeo razvoj jednostavnog sistema za kodiranje dinamičkih sadržaja za manje web prezentacije (da ne kažemo, "za lične potrebe", čemu je odgovarao i ondašnji pun naziv jezika - "Personal Home Page").
Međutim, tokom vremena jezik se razvijao (i razvio), i postao je prilično moćan i popularan.
Iako u novije vreme nije u pitanju jedina dostupna serverska tehnologija (ni izdaleka), PHP je često "sledeći prirodan korak" za sve pojedince koji su već savladali HTML, CSS i JavaScript i žele da se posvete izradi ozbiljnijih web aplikacija koje korisnicima ne isporučuju uvek isti sadržaj pri učitavanju određene stranice, već, sadržaj koji nastaje interakcijom korisnika sa serverom (ili u skladu sa drugim potrebama).
U prvom članku o PHP-u, pažnju ćemo posvetiti osnovnim postavkama jezika PHP (a pre toga, i osnovnim principima back-end programiranja); u sledećih nekoliko članaka osvrnućemo se ukratko na različite protokole za razmenu podataka, a potom ćemo (u obliku tutorijala), detaljno obrađivati teme koje se tiču svakodnevnih 'zahvata' na strani servera ....
Front-end, back-end, full-stack
Za početak, pre nego što pređemo na tematiku interpretacije skriptnih jezika na serverima i sam PHP, osvrnućemo se ukratko na sveprisutne pojmove "front-end", "back-end" i "full-stack", i (takođe), na mesto koje jezik PHP zauzima u navedenoj klasifikaciji.
Front-end je termin koji se odnosi na projektovanje i izradu vidljivih delova sajtova (odnosno, računarskih programa i informacionih sistema uopšte).
Drugim rečima, u pitanju je dizajn elemenata sa kojima korisnici direktno dolaze u kontakt, pri čemu se vodi računa o logičnom rasporedu i lakoj dostupnosti upravljačkih grafičkih elemenata (ali, često i tekstualnih), sve u cilju postizanja što boljeg korisničkog iskustva.
Back-end je termin koji se odnosi na projektovanje i izradu pozadinskih (tj. "nevidljivih") delova sajtova (odnosno programa i informacionih sistema uopšte), i - za razliku od front-end komponenti - u ovom slučaju se ne radi o elementima programa (tj. sajtova) sa kojima se korisnici susreću direktno, već, o procesima koji se tiču pravilne pripreme podataka koji se šalju korisniku, pri čemu se vodi računa o sigurnosti podataka i što efikasnijoj obradi (takođe u cilju postizanja što boljeg korisničkog iskustva).
Shodno navedenom, nije teško zaključiti da su HTML, CSS i JavaScript front-end jezici, PHP je back-end jezik, a izraz full-stack označava kombinaciju front-end i back-end pristupa.
Zarad upoznavanja sa principom funkcionisanja skriptnih jezika koji se izvršavaju na strani servera (i da bismo što bolje razumeli potrebu za takvim pristupom) - napravićemo osvrt na opšte principe učitavanja statičkih i dinamičkih sajtova (i sve izneto razmotrićemo na jednostavnim primerima iz svakodnevne prakse).
Učitavanje statičkih sajtova
Kao što je poznato od ranije, browseri interpretiraju HTML stranice preko DOM strukture, a sama struktura DOM stabla generiše se pri učitavanju HTML koda, koji (na zahtev klijenta), server šalje klijentu.
Komunikacija između klijenta i servera, pri učitavanju statičke stranice (u ponešto uprošćenom obliku i uz pretpostavku da ne dolazi do grešaka u izvršavanju), ima sledeći tok:
- klijent (najčešće web browser), pokreće učitavanje HTML stranice, * pozivanjem URL-a
- server prima zahtev, priprema HTML stranicu ** i vraća klijentu traženi sadržaj u obliku HTML koda
- browser prima HTML kod, kreira DOM strukturu i prikazuje stranicu u prozoru
Ukoliko učitana stranica nema potrebu za daljom (ili 'detaljnijom') komunikacijom sa serverom, komunikacija između klijenta i servera prestaje (sve dok je klijent eventualno ne inicira ponovo, pozivanjem istog URL-a, u nekom kasnijem trenutku).
Kao primer statičke stranice, zamislićemo galeriju slika poslovnog prostora koju određena firma drži na svom sajtu (pri učitavanju, sve slike se preuzimaju sa servera i prosleđuju klijentu).
Međutim, šta ako u nekom drugom slučaju (na nekom drugom sajtu), pojam galerija slika ne podrazumeva nekoliko slika (koje posetiocu sajta treba da prikažu poslovni prostor, poslovna dostignuća, tim saradnika koji stoje iza poduhvata i sl), već je u pitanju galerija slika u doslovnom značenju - veća kolekcija umetničkih slika (ili fotografija), koje se broje stotinama ili hiljadama?!
Učitavanje dinamičkih sajtova
Pre svega, sasvim je jasno da preuzimanje više stotina slika i prikaz na jednoj HTML stranici, nisu opcije koje dolaze u obzir (u praktičnom smislu), to jest, jasno je da bi učitavanje takvog statičkog sajta bilo u (krajnje povećem (!)) neskladu sa nepisanim pravilima web dizajna, prema kojima je preporučljivo da vreme učitavanja stranice bude manje od dve sekunde.
U praktičnom smislu, funkcionisanje online galerija umetničkih slika podrazumeva da se iz velike kolekcije (koja se čuva na serveru), korisniku preko browsera prikazuje samo određeni podskup slika, a takođe je za očekivati i to da izbor slika vrši sam korisnik.
Sve što smo naveli, podrazumeva pripremu podataka u skladu sa zahtevima klijenta ili drugim specifičnim zahtevima web prezentacije (a ne prosto učitavanje "istog sadržaja svaki put"), i stoga komunikacija između klijenta i servera u takvim okolnostima (i ovoga puta - u ponešto uprošćenom obliku i uz pretpostavku da ne dolazi do grešaka), ima sledeći tok:
- klijent bira parametre pretrage preko padajućih menija ili drugih prigodnih elemenata (parametri mogu biti: ime i prezime autora, raspon datuma u kome su slike nastale, tematika, rezolucija i sl)
- serveru se prosleđuje zahtev za učitavanje stranice (zahtev sadrži parametre koji su izabrani u prethodnom koraku)
- nakon prijema zahteva, na serveru se obavlja obrada (u bazi podataka se traže podaci o slikama koje zadovoljavaju zadate kriterijume)
- kreira se HTML stranica koja sadrži pronađene slike (tj. kreira se odgovarajući HTML kod sa
<img>tagovima), i šalje se nazad klijentu - završni deo komunikacije između klijenta i servera, ne razlikuje se mnogo od prethodnog primera: browser prima HTML kod (koji najverovatnije sadrži i reference za povezivanje sa CSS i JS datotekama preko kojih su definisani grafički dizajn i UX elementi stranice), kreira se DOM stablo i prikazuje se stranica sa pronađenim slikama
Sada razumemo šta je svrha skriptnog jezika koji se izvršava na serveru, a pošto je ovaj članak posvećen PHP-u (i uz ogradu da nije baš u pitanju "knjiška definicija"), mogli bismo reći sledeće: PHP interpretator je program koji se izvršava na strani servera, interpretira PHP kod iz datoteka koje sajt koristi, generiše HTML kod shodno ulaznim parametrima, i šalje generisani kod browseru klijenta.
To jeste ono što PHP interpretatori uglavnom rade (na većini sajtova), ali, svakako nije i jedino.
Preko PHP-a se takođe mogu pokretati i skripte koje se direktno izvršavaju na serveru (tako da se dejstvo pokrenutih skripti "ne vidi" u browseru).
Smatramo da je došlo vreme da se posvetimo PHP-u i sve navedeno počnemo da isprobavamo u praksi (s tim da ćemo se prvo podsetiti na nekoliko osnovnih smernica koje se tiču pokretanja lokalnog servera).
Instalacija PHP-a (uz pokretanje lokalnog web servera)
Budući da smo temi pokretanja lokalnog servera posvetili zaseban članak , nećemo se na ovom mestu previše baviti detaljima, ali, osvrnućemo se ponovo na najvažnije postavke: za kreiranje dinamičkih sajtova preko PHP-a (i isprobavanje primera u ovom članku), potreban je web server - softver koji "osluškuje" mrežni saobraćaj usmeren prema računaru na kome je sajt postavljen, tj. pokušaje drugih računara da pristupe instaliranim sajtovima, i (naravno), potrebna je instalacija PHP-a.
Za početak je najpraktičnije koristiti pakete programa kao što su XAMPP i WAMP (pogotovo u slučaju neiskusnijih korisnika). *
Kada su lokalni web server i PHP interpretator pokrenuti (što se dešava manje-više automatski, po pokretanju programa XAMPP ili WAMP), možemo pokrenuti browser i potom, preko adrese localhost, pristupati lokalnim sajtovima.
Kreiranje PHP skripti i naredba echo
Za početak, kreiraćemo veoma jednostavnu "hello world" skriptu, pri čemu preporučujemo da koristite jednu od sledeće dve strukture direktorijuma i datoteka za čuvanje skripte (adrese preko kojih se u browseru mogu otvarati sajtovi, takođe su prikazane u kodu):
D:\xampp\htdocs\sajtovi\01_hello_world\index.php
Adresa za pokretanje:
localhost/sajtovi/01_hello_world/
D:\xampp\htdocs\sajtovi\isprobavanje\01_hello_world.php
Adresa za pokretanje:
localhost/sajtovi/isprobavanje/01_hello_world.php
U skriptu unesite sledeći kod:
<?php
echo "Dobro došli na lokalni server!";
?>
Kada se skripta pokrene preko browsera, biće ispisana sledeća poruka:
Dobro došli na lokalni server!
U najpraktičnijem smislu, glavna svrha serverskih jezika tiče se kreiranja HTML sadržaja (koji se prosleđuje do browsera ili drugih klijentskih softvera), što se u slučaju PHP-a postiže upravo preko komande echo.
Preko naredbe echo, znakovne niske se mogu kombinovati sa vrednostima promenljivih, što ćemo videti u sledećem poglavlju, i (takođe), budući da smo spomenuli da komanda može vratiti HTML (ne samo običan tekst), pogledajmo kako se to izvodi na sasvim jednostavan način.
Kreirajte novu PHP datoteku sa nazivom 02_echo_i_html * (ili direktorijum sa istim nazivom u kome će biti datoteka index.php), i unesite sledeći kod:
<?php
echo "<a href='#'>Link 1</a>";
?>
Kada otvorite stranicu u browseru, biće prikazan link (tj. nije više u pitanju 'običan tekst'), i pri tom je (naravno) moguće kreirati i druge HTML elemente - po istom principu.
Promenljive u PHP-u
Promenljive u PHP-u imaju sledeća glavna svojstva:
- označavaju se znakom
$(koji stoji direktno ispred identifikatora) - ne podležu strogoj tipizaciji (slično kao u jezicima JavaScript i Python)
Za isprobavanje, kreirajte novu skriptu i unesite sledeći kod:
<?php
$a = 12; // celobrojna promenljiva
$f = 54.559; // decimalna promenljiva
$c = 'Z'; // znak
$s = "Dobar dan!"; // niska
$b = true; // boolean
echo "Celobrojna vrednost: " . $a . "<br>";
echo "decimalna vrednost: " . $f . "<br>";
echo "Znakovna promenljiva: '" . $c . "<br>";
if ($b) {
echo "Uslov je zadovoljen.<br>";
echo "Niska: \"" . $s . "\"<br>";
// Da bi bilo moguće razlikovati
// znake navoda koji određuju
// početak i kraj niske -
// od znakova navoda koji
// treba da se pojave u ispisu,
// koristi se escape sekvenca \"
}
?>
Prethodna skripta sadrži i određene delove sa kojima se do sada nismo susretali, i stoga ćemo se detaljnije osvrnuti na opšte principe korišćenja promenljivih u PHP-u:
- promenljive u PHP-u označavaju se uz prefiks
$, koji uvek mora stajati uz promenljivu (uz svaku pojavu promenljive u kodu) - promenljive (kao što smo već spomenuli), ne podležu tipizaciji, to jest (vrlo slično kao u programskom jeziku JavaScript), tip promenljive se određuje 'dinamički', pri izvršavanju skripte
- u naredbi
echo, kao operator spajanja niski koristi se.(tačka) - što predstavlja jedan od načina za ispis vrednosti promenljivih * - takođe, vidimo da se za prelazak u novi red može koristiti HTML tag
<br>(break), ** baš kao i kada se piše "običan HTML u običnoj HTML datoteci" - kada je potrebno da se u ispisu pojave znaci navoda, koristi se escape sekvenca
\"(na taj način, PHP interpretator pravi razliku između navodnika koji treba da se pojave u ispisu, i navodnika koji određuju levu i desnu granicu niske)
Varijante kombinovanog ispisa
Već smo videli (na delu), osnovni mehanizam konkatenacije (tj. spajanja niski) ....
<?php
echo "Početak niske " . $promenljiva . "ostatak niske";
echo $promenljiva . "<br>";
?>
.... međutim, moguće je (a reklo bi se, i mnogo zgodnije), koristiti i drugi pristup, koji podrazumeva da se promenljiva navodi direktno unutar niske:
<?php
echo "Početak niske $promenljiva ostatak niske";
echo "$promenljiva <br>";
?>
U jednostavnim primerima kakve prikazujemo u uvodnom članku, koristićemo (ipak) prvi pristup, koji smatramo preglednijim za početno upoznavanje, ali, uskoro ćemo šablonskim niskama posvetiti detaljan članak.
Kontrolne strukture
U programskom jeziku PHP, naredbe grananja i petlje mogu se koristiti upravo onako kako smo navikli i u ostalim "C-olikim" programskim jezicima (što ćemo prikazati kroz nekoliko uobičajenih primera) ....
Grananja (if-else, switch)
Za primer if grananja, uzećemo ugnežđeni if koji proverava da li je uneta vrednost pozitivna, negativna, ili nula:
<?php
$a = 10;
if ($a > 0) {
echo "Uneta vrednost je pozitivna.";
}
else {
if ($a < 0) {
echo "Uneta vrednost je negativna.";
}
else {
echo "Uneta vrednost je nula.";
}
}
?>
Za switch, primer će biti kod koji proverava da li uneta cifra pripada binarnom brojevnom sistemu:
<?php
$a = 10;
switch ($a) {
case 0: echo "Bit je isključen<br>"; break;
case 1: echo "Bit je uključen<br>"; break;
default: echo "Uneta vrednost nije binarna cifra"; break;
}
?>
(Sve funkcioniše na jednostavan i dobro poznat način.)
Petlje (while, do-while i for)
Osnovna while petlja takođe se zapisuje na poznat način (što ćemo prikazati na primeru skripte za ispis brojeva od 1 do 10):
<?php
$i = 1;
while ($i <= 10) {
echo $i . " <br>";
$i++;
}
?>
Prisutna je naravno i konstrukcija do-while ....
<?php
$i = 1;
do {
echo $i . " <br>";
$i++;
}
while ($i <= 10);
?>
.... a rezultujući ispis je isti kao i u prethodnom primeru.
Za kraj odeljka prikazaćemo i for petlju (još jednom, ne zaboravite znak $ ispred naziva svake promenljive):
<?php
for ($i = 1; $i <= 10; ++$i) {
echo $i . " <br>";
}
?>
(Ispis je isti kao i u prethodna dva slučaja.)
Funkcije u PHP-u
Veći i složeniji delovi koda, koji se često ponavljaju, mogu se zapisati u obliku funkcija (baš kao i u ogromnoj većini drugih programskih jezika).
Funkcije za rešavanje specifičnih zadataka možemo definisati sami, a tipski zadaci se (najčešće) rešavaju korišćenjem ugrađenih funkcija.
Definisanje korisničkih funkcija
Zarad definisanja funkcija u PHP-u, ispred naziva funkcije navodi se rezervisana reč function, a u zagradama se navode parametri.
Za primer ćemo definisati jednostavnu funkciju koja vraća veću od dve unete vrednosti ....
<?php
function maks($a, $b) {
if ($a >= $b) {
return $a;
}
else {
return $b;
}
}
?>
.... posle čega se funkcija može i poz(i)vati:
<?php
// Definicija iz prethodnog odeljka, u prikazu
// je izostavljena zarad preglednosti.
$prvi = 10;
$drugi = 12;
echo "Unete vrednosti su: " . $prvi . " i " . $drugi . "<br>";
echo "Najveća uneta vrednost: " . maks($prvi, $drugi) . "<br>";
?>
Kao što smo već nagovestili, za uobičajene/svakodnevne zadatke, uz instalaciju PHP-a dolazi i velika biblioteka sa funkcijama različitih namena ....
Ugrađene funkcije
Pomenućemo u nastavku nekoliko najčešće korišćenih funkcija za obavljanje operacija sa tekstualnim i brojčanim podacima (dok ćemo se sa ostalima upoznavati postepeno, u narednim člancima).
strlen - Provera dužine niske
Za proveru dužine niske koristi se funkcija strlen, pa (primera radi), ako pokrenemo sledeću skriptu ....
<?php
$s = "preraspodela";
$d = strlen($s);
echo "Dužina niske\"" . $s . "\" je" . $d . " znakova.<br>";
?>
.... dobićemo sledeći ispis:
Dužina niske "preraspodela" je 12 znakova.;
str_replace - Zamena dela niske
Za zamenu određenog tekstualnog obrasca drugom niskom, koristi se funkcija str_replace, koja prima tri argumenta:
- tekstualni obrazac koji se traži unutar određene niske
- nisku koja sadrži tekst kojim će biti zamenjen prethodno navedeni tekstualni obrazac (ukoliko bude pronađen)
- nisku unutar koje se obavlja pretraga, tj. zamena (niska može biti zadata unapred, unutar navodnika, a može se predati i identifikator promenljive koja sadrži nisku)
Uzmimo kao primer sledeću skriptu ....
<?php
$s = "Danas nije baš lep dan.";
$s = str_replace("nije baš", "je", $s);
echo $s . "<br>";
?>
.... koja pri pokretanju proizvodi sledeći ispis:
Danas je lep dan.
Međutim, bitno je primetiti da sledeći kod ....
<?php
$s = "Danas nije baš lep dan.";
str_replace("nije baš", "je", $s);
?>
.... neće dovesti do izmene niske $s, jer funkcija str_replace ne vrši direktnu izmenu niske koja je predata kao 3. argument, već kreira i vraća novu nisku (koju je potrebno povezati sa određenom promenljivom zarad dalje obrade).
abs - Apsolutna vrednost broja
Funkcija abs vraća apsolutnu vrednost unetog broja.
Pokretanje sledeće skripte ....
<?php
$a = -17.5;
echo "Uneti broj: " . $a . "<br>";
$a = abs($a);
echo "Apsolutna vrednost unetog broja: " . $a . "<br>";
?>
.... proizvodi sledeći ispis:
Uneti broj: -17.5
Apsolutna vrednost unetog broja: 17.5
rand - Generisanje nasumične brojčane vrednosti
Funkcija rand generiše (pseudo)nasumične celobrojne vrednosti.
<?php
$a = rand();
echo "Nasumična vrednost: " . $a . "<br>";
?>
Kada pokrenemo gornju skriptu, dobićemo sledeći ispis (zapravo, bolje je reći da smo mi 'jednom' dobili takav ispis kada smo pisali članak, a šansa da ponovo dobijemo istovetnu vrednost - ni izdaleka nije velika 🙂):
Nasumična vrednost: 424747146
Ukoliko je potrebno ograničiti raspon mogućih vrednosti koje funkcija rand vraća, navode se dva argumenta koji predstavljaju donju i gornju granicu:
<?php
$a = rand(1, 6);
echo "Nasumična vrednost (od 1 do 6): " . $a . "<br>";
?>
Ovoga puta dobijamo i drugačiji ispis:
Nasumična vrednost (od 1 do 6): 4
(Kao što ste verovatno pretpostavili, primer koji smo videli je simulacija bacanja kocke za igru.)
sqrt - Kvadratni koren broja
Funkcija sqrt vraća kvadratni koren brojčane vrednosti koja se predaje kao argument.
U sledećem primeru ....
<?php
$a = 2;
$k = sqrt($a);
echo "Broj: " . $a . "<br>";
echo "Kvadratni koren: " . $k . "<br>";
?>
.... kreira se ispis koji se odnosi na kvadratni koren broja 2:
Zadata vrednost: 2
Kvadratni koren zadatog broja: 1.4142135623731
U nastavku, upoznaćemo se ukratko i sa osnovnim principima korišćenja klasa i objekata (za primer ćemo uzeti vrlo jednostavnu klasu, ali, klasa će biti korektno zapisana i kompletirana).
Klase i objekti u PHP-u
Upotreba klasa i objekata u PHP-u gotovo se nimalo ne razlikuje u odnosu na druge C-olike OOP jezike, opšti principi su veoma slični (kao i sintaksa), ali, mestimično postoje sitnije razlike. *
Za početak, potrebno je pripremiti klasu (za primer ćemo uzeti jednostavnu klasu koja sadrži podatke o osobama).
<?php
class Osoba
{
public $ime, $prezime, $adresa;
function __construct($ime, $prezime, $datum_rodjenja) {
$this->ime = $ime;
$this->prezime = $prezime;
$this->adresa = $adresa;
}
function formatiranje_podataka() {
return $ime . " " . $prezime . ", " . $adresa;
}
function ispis_podataka() {
echo formatiranje_podataka() . "<br>";
}
}
?>
Pošto je klasa Osoba uredno definisana, mogu se kreirati objekti klase, i mogu se pozivati pripadajuće metode ....
<?php
$osoba = new Osoba("Petar", "Petrović", "Topolska 18");
echo "Podaci o osobi:<br>";
$osoba->ispis_podataka();
?>
.... pri čemu dobijamo sledeći ispis:
Podaci o osobi:
Petar Petrović, Topolska 18
Budući da su polja klase (ime, prezime i adresa) deklarisana kao javno dostupni elementi klase, prethodna skripta se može dopuniti na sledeći način:
<?php
$osoba = new Osoba("Petar", "Petrović", "Topolska 18");
echo "Podaci o osobi:<br>";
$osoba->ispis_podataka();
// Promena podataka:
echo "Novi podaci (izmenjena adresa):<br>";
$osoba->adresa = "Beogradska 24";
$osoba->ispis_podataka();
?>
Pri pokretanju skripte, ovoga puta dobijamo i opširniji ispis:
Podaci o osobi:
Petar Petrović, Topolska 18
Novi podaci (izmenjena adresa):
Petar Petrović, Beogradska 24
Kombinovanje PHP i HTML kodova
Pošto se polako približavamo kraju uvodnog izlaganja o PHP-u, osvrnućemo se na lepu i korisnu ideju (koju smo naveli na početku), koja se tiče toga kako se - unutar jedne ("iste") PHP datoteke - HTML kodovi mogu kombinovati sa PHP kodovima, sa čime ćemo se najlakše upoznati preko jednostavnog primera.
Kreirajte datoteku sa ekstenzijom *.php, unesite sledeći kod (i nakon toga pokrenite sajt preko lokalnog servera):
<!DOCTYPE html>
<html>
<head>
<title>HTML i PHP</title>
<meta charset='UTF-8'/>
<style>
.ispis {
font-size: 24pt;
font-weight: bold;
color: blue;
}
</style>
</head>
<body>
<?php
$r = rand();
if ($r % 2 == 0) {
$s = "<div class='ispis'>";
$s .= "Paran broj! :) (" . $r . ")";
$s .= "</div>";
echo $s;
}
else {
echo "Neparan broj! :( (" . $r . "<br>";
}
?>
</body>
</html>
Blok PHP koda (u gornjem primeru), nalazi se unutar HTML tagova, ali, to ni u kom slučaju ne ometa izvršavanje PHP koda, budući da se datoteka interpretira na sledeći način:
- ekstenzija datoteke je
*.php, što znači da će se uključiti PHP interpretator - delove datoteke koji nisu uokvireni "PHP zagradama", interpretator će tretirati kao običan HTML
- kada se pojavi 'otvarajuća PHP zagrada' (niska
<?php), interpretator počinje da izvršava PHP kod (što, u gornjem primeru, za krajnji rezultat ima generisanje HTML koda) - kada se pojavi 'zatvarajuća PHP zagrada' (niska
?>), interpretator se vraća na tumačenje HTML-a
Prikazani pristup nudi veoma visok nivo fleksibilnosti (što ćemo još bolje moći da sagledamo u narednim člancima).
Pozivanje spoljnih skripti (include, require)
Kada su u pitanju "lepe i korisne ideje", za sam kraj uvodnog članka osvrnućemo se na funkcije koje omogućavaju korišćenje programskog koda iz postojećih datoteka, što predstavlja (kako u PHP-u tako i inače), pristup koji programe i skripte čini znatno preglednijim.
Za uvoz spoljnih datoteka, u PHP-u se mogu koristiti četiri različite funkcije: include, include_once, require i require_once.
Ukoliko za primer uzmemo da skripta funkcije.php ima sledeći sadržaj ....
<!-- funkcije.php -->
<?php
// sadržaj datoteke
// funkcije.php
// ----- početak -----
function da_li_je_deljivo($n1, $n2) {
return $n1 % $n2 == 0;
}
// ------ kraj -------
?>
.... u drugim skriptama moguće je pozivati komandu include (ili neku od preostale tri funkcije koje smo prethodno naveli) ...
<!-- neka_druga_skripta.php -->
<?php
include("./funkcije.php");
$a = 12;
$b = 4;
if (da_li_je_deljivo($a, $b)) {
echo "Broj $a deljiv je brojem $b.<br>";
echo "$a / $b = $(a / b).<br>";
}
else {
echo "Broj $a nije deljiv brojem $b.<br>";
}
?>
.... što praktično proizvodi isti efekat kao da je sadržaj datoteke funkcije.php 'ručno kopiran' u drugu datoteku (bez PHP zagrada):
<!-- neka_druga_skripta.php -->
<?php
// sadržaj datoteke
// funkcije.php
// ----- početak -----
function da_li_je_deljivo($n1, $n2) {
return $n1 % $n2 == 0;
}
// ------ kraj -------
$a = 12;
$b = 4;
if (da_li_je_deljivo($a, $b)) {
echo "Broj $a deljiv je brojem $b.<br>";
echo "$a / $b = $(a / b).<br>";
}
else {
echo "Broj $a nije deljiv brojem $b.<br>";
}
?>
Kao što verovatno i sami pretpostavljate, u gornjem primeru se podrazumevalo da skripta funkcije.php postoji (na navedenoj putanji), međutim, ukoliko skripta koju uvozimo ne postoji - a pri tom se u nastavku pozivamo na delove koda iz navedene skripte - doći će do greške u izvršavanju (glavne) skripte!
U situacijama (kao što je gornji primer), kada izvršavanje ostatka skripte zavisi od uspešnog učitavanja spoljne skripte, potrebno je koristiti funkciju require, koja - u slučaju da je sve u redu sa učitavanjem - radi isto što i funkcija include, ali - ukoliko dođe do greške * - obustavlja dalje izvršavanje skripte.
Pošto smo na početku naveli četiri 'varijacije' funkcije za uvoz spoljne skripte - pri čemu u sva četiri slučaja postoji pokušaj kopiranja spoljne datoteke, osvrnućemo se na razlike, koje se (najprostije rečeno) mogu podeliti na razlike između funkcija include i require, i razlike između verzija funkcija sa sufiksom ili bez sufiksa _once.
Razliku između funkcija include i require već smo objasnili, ali, napravićemo kratak osvrt i na ovom mestu (zarad preglednosti):
includeiinclude_once- izvršavanje funkcije ne dovodi do obustavljanja izvršavanja ostatka skripte ukoliko dođe do greške pri kopiranju sadržaja spoljne skripterequireirequire_once- izvršavanje funkcije dovodi do obustavljanja izvršavanja ostatka skripte ukoliko dođe do greške pri kopiranju sadržaja spoljne skripte
Razlike između verzija sa sufiksom _once i bez sufiksa su sledeće:
includeirequire- spoljna skripta se kopira bezuslovnoinclude_onceirequire_once- pre pokušaja kopiranja, proverava se da li je spoljna datoteka već kopirana, i - ako spoljna datoteka jeste kopirana - neće biti kopirana ponovo
Sledeći koraci ....
Posle opšteg uvoda u PHP, bavićemo se (u narednim člancima), tehnikalijama koje se tiču korišćenja PHP-a za pokretanje 'pozadinskih procesa' na web serverima.
Neke od tema biće:
- prosleđivanje podataka serveru preko URL-a ili HTML forme
- povezivanje sa MySql bazama podataka
- kreiranje formi za prijavu korisnika i registraciju korisničkih naloga
- validacija korisničkog unosa
- korišćenje nizova, klasa i objekata ....
U sledeća dva članka, bavićemo se verovatno najuobičajenijim zadacima u web programiranju: obradom podataka koji su prosleđeni preko URL-a, i prosleđivanjem podataka serveru preko HTML forme ....