Ugrađeni web poslužitelj u interpreteru jezika PHP - GASERI


PHP je popularan skriptni jezik koji se primarno koristi u izradi web aplikacija. Razvoj PHP-a započeo je Rasmus Lerdorf 1994. godine, a godinu kasnije javno je objavio izvorni kod što je omogućilo svim zainteresiranima da ga koriste i pril...



Onion Details



Page Clicks: 0

First Seen: 03/15/2024

Last Indexed: 10/23/2024

Domain Index Total: 397



Onion Content



Preskoči na sadržaj Ugrađeni web poslužitelj u interpreteru jezika PHP je popularan skriptni jezik koji se primarno koristi u izradi web aplikacija. Razvoj PHP-a započeo je Rasmus Lerdorf 1994. godine, a godinu kasnije javno je objavio izvorni kod što je omogućilo svim zainteresiranima da ga koriste i prilagođavaju svojim potrebama. Od 1997. nadalje važnu ulogu u razvoju PHP-a imaju Zeev Suraski i Andi Gutmans , koji su 1999. godine i osnovali tvrtku Zend Technologies (danas samo Zend ) s ciljem pružanja na njemu temeljenih poslovnih rješenja. Maskota PHP-a je slon ElePHPant čije se različite vrste mogu pronaći na ElePHPant.me , a više detalja o njima se može pročitati u A Field Guide to Elephpants . Korisnici i značaj PHP je izvorno postao široko korišten kao dio četvorke Linux, Apache, MySQL i PHP (kraće stog LAMP ) koja je predstavljala de facto standard za razvoj web aplikacija krajem 1990-ih. PHP danas (često upravo kao dio stoga LAMP) pogoni web sjedišta svih veličina, od osobnih i projektnih sjedišta kao što je FreeBSD Live Streaming , preko profesionalnih blogova i portala temeljenih na WordPressu kao što su PlayStation.Blog , TechCrunch i Microsoft Stories , nacionalnih sustava za e-učenje temeljenih na Moodleu kao što je Merlin , stranica s vijestima kao što su GamingOnLinux , Novi List i , Srednja.hr , web trgovina kao što su Pevex i Emmezeta , web sjedišta tvrtki i drugih organizacija kao što su Tesla , Agrokor , Public Internet Registry (domena .org) , Verisign (domene .com i .net) , Hrvatska zaklada za znanost , IBM , Sveučilište Stanford , Odjel za informatiku Sveučilišta u Rijeci , CARNET i NASA , pa do tehnoloških divova kao što su Facebook , Wikipedia ( ilustracija načina rada ), Flickr , Indeed , Dailymotion , VK (nekad VKontakte) i Slack . Vremenom je LAMP (i time PHP) prestao biti de facto standard za razvoj web aplikacija jer su postepeno popularnost stekli i drugi alati za razvoj web aplikacija , npr. ASP.NET (C#) , Express.js (Node.js) , Spring (Java) , Ruby on Rails (Ruby) , Django (Python) i Flask (Python) ( dobar pregled objavila je tvrtka Space-O Technologies ). (Specijalno, sve popularniji okvir Express.js i njegovo izvršno okruženje Node.js naglašavaju kako stog LAMP zamjenjuju stogom MEAN : MongoDB, Express.js, AngularJS i Node.js .) Bez obzira na sve brojniju konkurenciju, PHP se i danas široko koristi, a u nekim segmentima čak bilježi i porast upotrebe. Prema podacima dostupnim u studenom 2020. godine, W3Techs navodi kako PHP pogoni 79% web sjedišta za koja je poznat jezik na poslužiteljskoj strani , a BuiltWith tvrdi da preko 50%, preko 55% i gotovo 60% web sjedišta među milijun, 100 tisuća i 10 tisuća najposjećenijih (respektivno) koriste PHP . Osim toga, u studenom 2020. godine Indeed je objavio da je broj otvorenih natječaja za posao "Entry level PHP developer" porastao 834% u odnosu na siječanj 2020. godine . Suvremena upotreba PHP-a uglavnom podrazumijeva korištenje okvira za razvoj web aplikacija Laravel , Symfony , CodeIgniter , CakePHP i brojnih drugih . Pritom se grupa PHP Framework Interop Group (PHP-FIG) bavi standardizacijom načina rada okvira kako bi se njihove pojedine komponente lakše kombinirale kod korištenja i za tu svrhu donosi preporuke koje razvijatelji okvira mogu slijediti. Upotreba sučelja naredbenog retka Pokretanje datoteka s izvornim kodom iz naredbenog retka vršimo naredbom php . Za početak se uvjerimo da imamo instalirano sučelje naredbenog retka interpretera jezika PHP (naredba php ) i saznajmo njegovu verziju parametrom --version , odnosno -v : $ php -v PHP 7 .4.11 ( cli ) ( built: Oct 6 2020 10 :34:39 ) ( NTS ) Copyright ( c ) The PHP Group Zend Engine v3.4.0, Copyright ( c ) Zend Technologies with Zend OPcache v7.4.11, Copyright ( c ) , by Zend Technologies Note Vidimo da koristimo verziju 7.4.11 koja nije posljednja izdana i zbog toga je službeno nepodržana , ali je dovoljno nova za potrebe učenja. U praktičnoj primjeni za posluživanje web aplikacija je dobro koristiti posljednju verziju s neke od aktivno podržanih grana izdanja . Mi ćemo u nastavku koristiti tek neke od značajki ovog sučelja i zbog toga ćemo spomenuti kako se koristi tek nekolicina parametara. Pregled svih parametara i njihovog načina korištenja moguće je pronaći u man stranici php(1) (naredba man 1 php ) ili u PHP-ovom priručniku u odjeljku Using PHP from the command line . Korištenjem uređivača teksta po želji stvorimo datoteku hello.php sadržaja: Hello, world! \n " ; U drugom terminalu od onog u kojem je poslužitelj pokrenut možemo korištenjem naredbe curl saznati kako poslužitelj odgovara na klijentov HTTP zahtjev: $ curl -v http://localhost:8000/ * Trying ::1:8000... * Connected to localhost ( ::1 ) port 8000 ( #0) > GET / HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.72.0 > Accept: */* > * Mark bundle as not supporting multiuse Hello, world! * Closing connection 0 Kod slanja zahtjeva, nismo naveli metodu pa cURL koristi zadanu metodu GET ( više detalja o metodama HTTP zahtjeva na MDN-u ; više detalja o HTTP metodi GET na MDN-u ). Podsjetimo se da parametar --verbose , odnosno -v čini cURL rječitim u radu pa vidimo poruke o radu HTTP klijenta (znak * ), zaglavlja i tijelo zahtjeva (znak > ) te zaglavlja i tijelo odgovora (znak GET /moja-stranica.html HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.72.0 > Accept: */* > * Mark bundle as not supporting multiuse 404 Not Found body { background-color: #fcfcfc; color: #333333; margin: 0; padding:0; } h1 { font-size: 1 .5em ; font-weight: normal ; background-color: #9999cc; min-height:2em; line-height:2em; border-bottom: 1px inset black; margin: 0; } h1, p { padding-left: 10px ; } code.url { background-color: #eeeeee; font-family:monospace; padding:0 2px;} * Closing connection 0 Not Found The requested resource /moja-stranica.html was not found on this server. Uočimo da smo dobili odgovor koji sadrži HTML datoteku s porukom da stranica nije pronađena i da taj odgovor ima HTTP statusni kod 404 Not Found ( više detalja o HTTP statusnom kodu 404 Not Found na MDN-u ). Na strani poslužitelja su poruke sad oblika: [Mon Nov 2 11:46:35 2020] [::1]:52710 Accepted [Mon Nov 2 11:46:35 2020] [::1]:52710 [404]: (null) /moja-stranica.html - No such file or directory [Mon Nov 2 11:46:35 2020] [::1]:52710 Closing Stvorimo datoteku public/moja-stranica.html sadržaja: Moja stranica Dobrodošli na moju stranicu! Ponovimo isti zahtjev: $ curl -v http://localhost:8000/moja-stranica.html * Trying ::1:8000... * Connected to localhost ( ::1 ) port 8000 ( #0) > GET /moja-stranica.html HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.72.0 > Accept: */* > * Mark bundle as not supporting multiuse Moja stranica Dobrodošli na moju stranicu! * Closing connection 0 Vidimo da smo uspješno primili statičnu datoteku s HTML-om. Na strani poslužitelja poruke su oblika: [Mon Nov 2 22:43:48 2020] [::1]:52772 Accepted [Mon Nov 2 22:43:48 2020] [::1]:52772 [200]: (null) /moja-stranica.html [Mon Nov 2 22:43:48 2020] [::1]:52772 Closing Na sličan način možemo koristiti i datoteke drugih vrsta. Za ilustraciju, preuzmimo cURL-om s Wikimedia Commons logotip Odjela za informatiku Sveučilišta u Rijeci u formatu SVG i spremimo ga u datoteku public/inf-logo.svg (parametar --output , odnosno -o ). To možemo učiniti naredbom: $ curl -o public/inf-logo.svg https://upload.wikimedia.org/wikipedia/commons/5/59/Inf-uniri-hr-logo.svg Sad možemo i tu datoteku zatražiti od poslužitelja: $ curl -v http://localhost:8000/inf-logo.svg * Trying ::1:8000... * Connected to localhost ( ::1 ) port 8000 ( #0) > GET /inf-logo.svg HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.72.0 > Accept: */* > * Mark bundle as not supporting multiuse image/svg+xml Uočimo promjenu u zaglavlju Content-Type koje sadrži MIME tip ( više detalja o MIME tipovima na MDN-u ) resursa poslanog u odgovoru; ranije je resurs bio HTML dokument pa je njegov MIME tip bio text/html , a sad je to SVG pa je image/svg+xml ( više detalja o zaglavlju Content-Type na MDN-u ). SVG je tekstualni format pa njegov sadržaj možemo čitati slično kao što je slučaj s HTML-om. Da se radilo o binarnom formatu kao što su JPEG ili PNG, to ne bi bio slučaj, u što se možete uvjeriti postavljanjem takvih datoteka unutar direktorija public te zahtjevom za odgovarajućom datotekom korištenjem cURL-a. Vidjet ćete i da se MIME tipovi mijenjaju ovisno o ekstenziji koju datoteka ima, a potpun popis podržanih MIME tipova od strane PHP-ovog ugrađenog web poslužitelja možete pronaći u tablici Supported MIME Types (file extensions) u službenoj dokumentaciji . Dohvaćanje različitih putanja korištenjem različitih metoda Za usporedbu isprobajmo dohvaćanje putanja /proba i /proba/ : $ curl -v http://localhost:8000/proba * Trying ::1:8000... * Connected to localhost ( ::1 ) port 8000 ( #0) > GET /proba HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.72.0 > Accept: */* > * Mark bundle as not supporting multiuse Hello, world! * Closing connection 0 $ curl -v http://localhost:8000/proba/ * Trying ::1:8000... * Connected to localhost ( ::1 ) port 8000 ( #0) > GET /proba/ HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.72.0 > Accept: */* > * Mark bundle as not supporting multiuse Hello, world! * Closing connection 0 Uočimo da web poslužitelj odgovara na istim sadržajem kao kad smo poslali zahtjev na putanju / metodom GET. Osim toga, kada ostavimo putanju istom, a promijenimo metodu GET u POST ( više detalja o HTTP metodi POST na MDN-u ), poslužitelj ponovno odgovara istim sadržajem: $ curl -v -X POST http://localhost:8000/ * Trying ::1:8000... * Connected to localhost ( ::1 ) port 8000 ( #0) > POST / HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.72.0 > Accept: */* > * Mark bundle as not supporting multiuse Hello, world! * Closing connection 0 Na strani web poslužitelja također vidimo da odgovori na zahtjeve imaju statusni kod 200 OK : [Mon Nov 2 22:57:35 2020] [::1]:52786 Accepted [Mon Nov 2 22:57:35 2020] [::1]:52786 [200]: GET /proba [Mon Nov 2 22:57:35 2020] [::1]:52786 Closing [Mon Nov 2 22:57:41 2020] [::1]:52788 Accepted [Mon Nov 2 22:57:41 2020] [::1]:52788 [200]: GET /proba/ [Mon Nov 2 22:57:41 2020] [::1]:52788 Closing [Mon Nov 2 23:01:54 2020] [::1]:52790 Accepted [Mon Nov 2 23:01:54 2020] [::1]:52790 [200]: POST / [Mon Nov 2 23:01:54 2020] [::1]:52790 Closing Naime, svi zahtjevi za nekom putanjom koja nije direktorij koji postoji ili statični sadržaj (datoteka s poznatim nastavkom i MIME tipom) serviraju se pokretanjem skripte index.php . Uočimo da u trenutnoj varijanti naša skripta vraća u odgovoru Hello, world! bez obzira na metodu zahtjeva i putanju na koju je upućen. U nastavku ćemo prvo naučiti različito obrađivati zahtjeve ovisno o metodi i putanji, a zatim i po sadržaju. A...