Superglobalni niz $_SERVER. $_SERVER - Podaci o poslužitelju i izvršnom okruženju Collegium korisničke informacije php
Nepromišljenost je kada vas strast sprječava da razmišljate.
Smiješni aforizmi
Nepromišljenost kao osobina ličnosti - sklonost ne razmišljati o posljedicama svojih postupaka; ponašati se nedovoljno promišljeno, glupo, nepromišljeno; nesposobnost da se duboko i temeljito razmisli, da se nešto ispravno shvati.
Jedne oštre zime obitelji je ponestalo drva za ogrjev. Otac je izašao na periferiju, našao mrtvo stablo i posjekao ga. U proljeće je vidio izdanke kako izbijaju iz panja stabla koje je posjekao. “Bio sam siguran,” rekao je otac, “da je ovo drvo mrtvo.” Tada je bilo toliko hladno da su joj grane od mraza pucale, lomile se i padale na zemlju, kao da u korijenju nije ostala ni kap života. Sada vidim da je život još svjetlucao u ovom sanduku.
I, okrenuvši se svom sinu, rekao je: "Zapamti ovu lekciju." Nikad ne sjeci drvo zimi. Nikada ne donosite odluke bez razmišljanja, u krivo vrijeme ili kada ste u lošem stanju uma. Čekati. Budite strpljivi, loša vremena će proći. Zapamtite da će se proljeće vratiti.
Nepromišljenost je kći gluposti i gluposti. Ovo je odsustvo bilo kakve prisutnosti zdravog razuma. Zamišljenost govori o nepažnji i nepoštivanju ljudi. Koga volimo i poštujemo, do njega nam je stalo, brinemo se i brinemo, pa zamišljamo sve nijanse, sve sitnice koje bi mu mogle naškoditi ili smetati u životu. Koga ne poštujemo i ne cijenimo, pokazujemo nepromišljenost.
Nepromišljenost je saveznik idiotizma, gluposti, gluposti i bezumlja.
Tip glumeći radoznalost pita zgodnu stjuardesu: - Curo, što znači TU-154-2B? - Zar se ne možete sami sjetiti? Pa TU znači da je avion proizveo konstruktor Tupoljev, 150 je broj sjedala u kabini, a 4 je broj članova posade. - A 2B? - Pa očito ti je nepromišljenost jača strana! Ovo smo Marinka i ja.
Nepromišljenost je kada osoba živi ne shvaćajući da će za svaki postupak morati odgovarati. Ne pada mu na pamet pomisao da će mu se posljedice njegovih postupaka, poput bumeranga, vratiti po zakonu karme. I dobro i loše sigurno će se opet vratiti.
Nepromišljenost je dokazani način izazivanja neugodnosti onima oko vas.
V. Schlachter kaže da nepromišljenost vrlo često doživljavamo kao glupost. Ili čak zbog bestijalnosti. Na primjer, vozač je ušao u prometno raskrižje. Blokirao je promet svima koji su stajali na sporednoj cesti i čekali da se upali zeleno svjetlo na semaforu. Ali on je to učinio, najvjerojatnije, ne iz bijesa, a ne zato što je bio glupi, podli grubijan. Jednostavno nije zamarao svoju jadnu glavicu da razmisli o posljedicama. Sada mu svi trube (češće njoj!) i nazivaju ga najnelaskavijim epitetima iz neformalnog vokabulara.
"Ostavite mački puno vode, neće me biti tri dana", kaže mama. A moj sin donese mačku pakiranje plastičnih boca od litre i pol. Pij, mačko! Njegovom sinu ne pada ni na pamet činjenica da mačka ne može otvoriti bocu i piti iz nje. Tražili su još vode - donio je još, u čemu je problem? Nije ovo napravio iz gluposti. I to ne iz mržnje prema nesretnoj mački. Od nepromišljenosti!
Glupost pada na um puno prije nego razum. Uvijek ga prate ishitrene presude.
Učitelj je uvijek upozoravao svoje učenike na nepromišljenost, odnosno na ishitrene sudove o ljudima, a još više na nepromišljene savjete. Rekao je ovo: “Sve dok u svom srcu i umu ne osjetite da ste pronikli u samu bit problema i da vas ne napušta ni najmanja sumnja da činite pravu stvar, neka vaš najbolji postupak bude nečinjenje, a najsigurniji riječ budi tišina.” Inače će vaš savjet prisiliti ljude da ponove sudbinu seljaka koji pati od nepromišljenosti.
Što mu se dogodilo? - pitali su učenici. - Njegovu kuću, koja stoji na brežuljku, sa svih su strana zapuhali žestoki vjetrovi. Seljak je iz nepromišljenosti naivno vjerovao da se vjetar pojavljuje jer se visoka stabla koja okružuju kuću njišu s jedne strane na drugu. Jednog dana se naljutio i posjekao sva stabla. Zbog toga je kuća, izgubivši posljednju zaštitu, postala još hladnija i vjetrovitija.
Lakomislenost je pošast ljudi koji misle samo na svoje interese.
Zastavnik pita vojnika: - Što učiniti u slučaju nuklearne eksplozije? "Legnite s nogama prema bljesku i pokrijte se rukama", odgovara on. - Pogrešno. Morate ispružiti ruke naprijed s mitraljezom kako rastaljeni metal ne bi kapao na čizme koje je izdala vlada.
Nepromišljenost gura osobu u okruženje neizvjesnosti. Kada čovjek ne može zamisliti što će se dogoditi za nekoliko minuta, to znači da živi u stanju potpune neizvjesnosti.
Moj muž se vratio s poslovnog puta. Nema nikoga kod kuće. Odlučio sam se sakriti kako bih iznenadio svoju ženu. Odjednom ugleda svoju ženu kako ulazi u stan s nekim muškarcem. Odlaze u spavaću sobu. Vrata se zatvaraju, muž trči do ključanice. I vidi svoju ženu kako se ljubi s tim čovjekom, skida joj svu odjeću, oboje se bacaju na krevet, on skida odjeću i baca gaćice prema ulaznim vratima, gdje se suprug skriva, a oni, viseći na ručku, dobro zatvorite bravu mužu i cijeli pregled. A onda muž iznervirano pomisli: "Pa to je izgubljen dan, opet potpuna neizvjesnost!"
Peter Kovalev
5. veljače , 2017
Ne znam nijedan PHP okvir. To je žalosno i sramotno, ali još nije zakonom zabranjeno. Ali u isto vrijeme želim se igrati s REST API-jem. Problem je što php standardno podržava samo $_GET i $_POST. A za RESTful uslugu također morate znati raditi s PUT, DELETE i PATCH. I nije baš očito kako kulturno obraditi mnoge zahtjeve poput PREUZMI http://site.ru/users, IZBRIŠI http://site.ru/goods/5 i druge opscenosti. Kako zamotati sve takve zahtjeve u jednu točku, univerzalno ih raščlaniti na dijelove i pokrenuti potreban kod za obradu podataka?
Gotovo svaki PHP okvir to može učiniti odmah. Na primjer, Laravel, gdje je usmjeravanje implementirano jasno i jednostavno. Ali što ako trenutno ne trebamo proučavati novu veliku temu, već samo želimo brzo pokrenuti projekt s podrškom za REST API? O tome će se raspravljati u članku.
Što bi naša RESTful usluga trebala moći učiniti?
1. Podržava svih 5 glavnih vrsta zahtjeva: GET, POST, PUT, PATCH, DELETE.
2. Riješite razne rute pogleda
POST /roba
PUT /roba/(goodId)
GET /users/(userId)/info
i drugi proizvoljno dugi lanci.
Pažnja: ovaj članak ne govori o osnovama REST API-ja
Pretpostavljam da ste već upoznati s REST pristupom i da razumijete kako funkcionira. Ako ne, onda postoji mnogo sjajnih članaka na internetu o osnovama REST-a - ne želim ih duplirati, moja je ideja pokazati kako raditi s REST-om u praksi.
Koju ćemo funkcionalnost podržavati?
Razmotrimo 2 entiteta - proizvode i korisnike.
Za proizvode, opcije su sljedeće:
- 1. GET /roba/(goodId)— Dobivanje informacija o proizvodu
- 2. POST /roba— Dodavanje novog proizvoda
- 3. PUT /roba/(goodId)— Uređivanje proizvoda
- 4. PATCH /roba/(goodId)— Uređivanje nekih parametara proizvoda
- 5. DELETE /roba/(goodId)— Uklanjanje proizvoda
Za korisnike, radi raznolikosti, razmotrimo nekoliko opcija s GET-om
- 1. GET /korisnici/(userId)— Potpuni podaci o korisniku
- 2. GET /users/(userId)/info— Samo opći podaci o korisniku
- 3. GET /users/(userId)/orders— Popis korisničkih naloga
Kako će ovo funkcionirati s izvornim PHP-om?
Prvo što ćemo napraviti je postaviti .htaccess tako da se svi zahtjevi preusmjeravaju na datoteku index.php. On je taj koji će se baviti izvlačenjem podataka.
Drugo, odlučimo koji nam podaci trebaju i napišimo kod za primanje - u index.php.
Zanimaju nas 3 vrste podataka:
- 1. Metoda zahtjeva (GET, POST, PUT, PATCH ili DELETE)
- 2. Podaci s URL-a, na primjer korisnici/(userId)/info - potrebna su sva 3 parametra
- 3. Podaci iz tijela zahtjeva
.htaccess
Kreirajmo .htaccess datoteku u korijenu projekta
RewriteEngine On RewriteCond %(REQUEST_FILENAME) !-f RewriteRule ^(.+)$ index.php?q=$1
Ovim misterioznim redcima zapovijedamo vam da učinite ovo:
1 - pošaljite sve zahtjeve bilo koje vrste u king-file index.php
2 - učinite niz u URL-u dostupnim u index.php u get parametru q. Odnosno, podaci s URL-a poput /korisnici/(userId)/info dobit ćemo od $_GET["q"].
indeks.php
Pogledajmo index.php red po red. Prvo, uzmimo metodu zahtjeva.
// Definirajte metodu zahtjeva $method = $_SERVER["REQUEST_METHOD"];
Zatim podaci iz tijela zahtjeva
// Dobivanje podataka iz tijela zahtjeva $formData = getFormData($method);
Za GET i POST, lako je izvući podatke iz odgovarajućih nizova $_GET i $_POST. Ali za druge metode treba biti malo perverzan. Kod za njih se izvlači iz streama php://unos, kod je jednostavan za Google, upravo sam napisao opći omot - getFormData($method) funkcija
// Dobivanje podataka iz funkcije tijela zahtjeva getFormData($method) ( // GET ili POST: vrati podatke kakvi jesu if ($method === "GET") return $_GET; if ($method === "POST" ) return $_POST; // PUT, PATCH ili DELETE $data(); explode("&", file_get_contents("php://input")); foreach($exploded as $pair) ($item = explode ("=", $pair); if (count($item) == 2) ( $data = urldecode($item); ) ) return $data;
Odnosno, dobili smo potrebne podatke skrivanjem svih detalja u getFormData - pa, super. Prijeđimo na najzanimljiviji dio – rutiranje.
// Raščlanite url $url = (isset($_GET["q"])) ? $_GET["q"] : ""; $url = rtrim($url, "/"); $urls = explode("/", $url);
Gore smo saznali da će .htaccess staviti parametre iz URL-a u q-parametar niza $_GET. Odnosno, $_GET["q"] će sadržavati nešto poput ovoga: korisnici/10. Bez obzira koju metodu koristimo za izvršenje zahtjeva.
A eksplodirati("/", $url) pretvara ovaj niz u niz za nas, s kojim već možemo raditi. Stoga napravite koliko god duge lance upita, na primjer,
GET /goods/page/2/limit/10/sort/price_asc
I budite uvjereni, dobit ćete niz
$urls = array("roba", "stranica", "2", "limit", "10", "sort", "price_asc");
Sada imamo sve podatke, moramo učiniti nešto korisno s njima. A samo 4 retka koda će to učiniti
// Definirajte usmjerivač i url podatke $router = $urls; $urlData = array_slice($urls, 1); // Povežite datoteku usmjerivača i pokrenite glavnu funkciju include_once "usmjerivači/" . $usmjerivač. ".php"; route($method, $urlData, $formData);
shvaćate li Stvaramo mapu routera u koju stavljamo datoteke koje manipuliraju jednim entitetom: proizvodima ili korisnicima. U isto vrijeme, slažemo se da se nazivi datoteka podudaraju s prvim parametrom u urlData - to će biti usmjerivač, $router. I ovaj router treba ukloniti iz urlData, više nam ne treba i služi samo za povezivanje tražene datoteke. array_slice($urls, 1) i dat će nam sve elemente niza osim prvog.
Sada preostaje samo spojiti željenu datoteku usmjerivača i pokrenuti funkciju rute s tri parametra. Koja je ova ruta funkcije? Dogovorimo se da će u svakoj datoteci usmjerivača biti definirana funkcija koja će na temelju ulaznih parametara odrediti koju je radnju korisnik pokrenuo i izvršiti traženi kod. Sada će postati jasnije. Razmotrimo prvi zahtjev - dobivanje podataka o proizvodu.
GET /roba/(goodId)
Usmjerivači datoteka/roba.php
// Funkcija usmjerivača route($method, $urlData, $formData) ( // Dobivanje informacija o proizvodu // GET /goods/(goodId) if ($method === "GET" && count($urlData) == = 1) ( // Dobivanje id-a proizvoda $goodId = $urlData; // Izvlačenje proizvoda iz baze podataka... // Izlaz odgovora klijentu echo json_encode(array("method" => "GET", "id" => $goodId, "good" => "phone", "price" => 10000)); greška" => "Loš zahtjev") "));
Sadržaj datoteke je jedna velika funkcija rute, koja, ovisno o proslijeđenim parametrima, izvodi potrebne radnje. Ako se GET metoda i 1 parametar (goodId) prosljeđuju urlData, onda je to zahtjev za dobivanje podataka o proizvodu.
Pažnja: primjer je vrlo pojednostavljen
U stvarnom životu, naravno, morate dodatno provjeriti ulazne parametre, na primjer, da je goodId broj. Umjesto da ovdje pišete kod, vjerojatno ćete uključiti traženu klasu. A da biste primili proizvod, kreirajte objekt ove klase i pozovite neku metodu na njemu.
Ili možda prebaciti kontrolu na neki kontroler, koji će se već pobrinuti za inicijalizaciju potrebnih modela. Postoji mnogo opcija, mi samo razmatramo opću strukturu koda.
U odgovoru klijentu ispisujemo potrebne podatke: naziv proizvoda i njegovu cijenu. ID proizvoda i metoda potpuno su izborni u stvarnoj aplikaciji. Prikazujemo ih samo kako bismo bili sigurni da je pozvana ispravna metoda s ispravnim parametrima.
Pokušajmo s primjerom: otvorite konzolu preglednika i pokrenite kôd
$.ajax((url: "/examples/rest/goods/10", metoda: "GET", dataType: "json", uspjeh: funkcija(odgovor)(console.log("odgovor:", odgovor))) )
Kod će poslati zahtjev poslužitelju na kojem sam postavio sličnu aplikaciju i poslati odgovor. Provjerite je li ruta koja vas zanima /roba/10 stvarno djelovalo. Na kartici Mreža primijetit ćete isti zahtjev.
I da, /examples/rest je korijenski put naše testne aplikacije do stranice
Ako ste navikli koristiti curl u konzoli, pokrenite ovo u terminalu - odgovor će biti isti, čak i sa zaglavljima s poslužitelja.
Curl -X GET https://site/examples/rest/goods/10 -i
Na kraju funkcije napisali smo sljedeći kod.
// Vrati zaglavlje pogreške ("HTTP/1.0 400 Bad Request"); echo json_encode(array("greška" => "Loš zahtjev"));
To znači da ako smo pogriješili s parametrima ili tražena ruta nije definirana, klijentu ćemo vratiti grešku 400 Bad Request. Na primjer, URL-u dodajte nešto poput ovoga: roba/10/drugi_param i vidjet ćete grešku u konzoli i odgovor 400 - krivi zahtjev nije prošao.
http kodovima odgovora poslužitelja
Nećemo se zamarati ispisivanjem različitih kodova, iako se to isplati učiniti prema REST-u. Postoji mnogo pogrešaka klijenata. Čak iu našem jednostavnom slučaju, 405 je prikladan u slučaju netočno proslijeđene metode. Ne želim namjerno komplicirati stvari.
Ako bude uspješan, naš poslužitelj će uvijek vratiti 200 OK. Srećom, kada stvarate resurs, trebali biste dati 201 Created. Ali opet, u smislu pojednostavljenja, odbacit ćemo ove suptilnosti, ali u stvarnom projektu možete ih lako implementirati sami.
Iskreno rečeno, članak je gotov. Mislim da već razumijete pristup, kako se sve rute rješavaju, podaci se dohvaćaju, kako ih testirati, kako dodati nove zahtjeve itd. Ali da upotpunim sliku, dat ću implementaciju preostalih 7 upita koje smo naveli na početku članka. Usput ću dati nekoliko zanimljivih komentara, a na kraju ću postaviti arhivu s izvornim kodom.
POST /roba
Dodavanje novog proizvoda
// Dodavanje novog proizvoda // POST /roba if ($method === "POST" && empty($urlData)) ( // Dodavanje proizvoda u bazu podataka... // Izlaz odgovora klijentu echo json_encode (array("method" => "POST", "id" => rand(1, 100), "formData" => $formData));
urlData je sada prazan, ali se koristi formData - jednostavno ćemo ga prikazati klijentu.
Kako to učiniti "kako treba"?
Prema kanonima REST-a, u zahtjevu za objavu trebali biste vratiti samo ID stvorenog entiteta ili url s kojeg se taj entitet može dobiti. To jest, odgovor će biti samo broj - (dobarId), ili /roba/(goodId).
Zašto sam napisao "ispravno" pod navodnicima? Da, jer REST nije skup strogih pravila, već preporuka. A kako ćete to provesti ovisi o vašim preferencijama ili već prihvaćenim dogovorima na konkretnom projektu.
Samo imajte na umu da će drugi programer koji čita kod i svjestan REST pristupa u odgovoru na zahtjev za objavu očekivati ID kreiranog objekta ili url s kojeg se podaci o ovom objektu mogu dohvatiti zahtjevom za dobivanje.
Testiranje s konzole
$.ajax((url: "/examples/rest/goods/", metoda: "POST", podaci: (dobar: "bilježnica", cijena: 20000), dataType: "json", uspjeh: funkcija (odgovor)( console.log("odgovor:", odgovor))))
Curl -X POST https://site/examples/rest/goods/ --data "good=notebook&price=20000" -i
PUT /roba/(goodId)
Uređivanje proizvoda
// Ažuriraj sve podatke o proizvodu // PUT /goods/(goodId) if ($method === "PUT" && count($urlData) === 1) ( // Dohvati ID proizvoda $goodId = $urlData; / / Ažuriraj sva polja proizvoda u bazi podataka... // Izlaz odgovora klijentu echo json_encode(array("method" => "PUT", "id" => $goodId, "formData" => $formData)) ;
Ovdje su svi podaci već iskorišteni u potpunosti. ID proizvoda izvlači se iz urlData, a svojstva iz formData.
Testiranje s konzole
$.ajax((url: "/examples/rest/goods/15", metoda: "PUT", podaci: (dobar: "bilježnica", cijena: 20000), dataType: "json", uspjeh: funkcija (odgovor) (console.log("odgovor:", odgovor))))
Curl -X PUT https://site/examples/rest/goods/15 --data "good=notebook&price=20000" -i
PATCH /roba/(goodId)
Djelomično ažuriranje proizvoda
// Djelomično ažuriranje podataka o proizvodu // PATCH /goods/(goodId) if ($method === "PATCH" && count($urlData) === 1) ( // Dohvati ID proizvoda $goodId = $urlData; // Ažuriramo samo navedena polja proizvoda u bazi podataka... // Izlaz odgovora klijentu echo json_encode(array("method" => "PATCH", "id" => $goodId, "formData" => $formaData));
Testiranje s konzole
$.ajax((url: "/examples/rest/goods/15", metoda: "PATCH", podaci: (cijena: 25000), dataType: "json", uspjeh: funkcija(odgovor)(console.log(" odgovor:", odgovor))))
Curl -X PATCH https://site/examples/rest/goods/15 --data "price=25000" -i
Čemu sve ovo razmetanje s PUT i PATCH?
Nije li dovoljan jedan PUT? Ne izvode li istu radnju - ažuriraju podatke objekta?
Tako je - prema van radnja je jedna. Razlika je u prenesenim podacima.
PUT pretpostavlja da se poslužitelj šalje svi polja objekata, i samo PATCH promijenjeno. One poslane u tijelu zahtjeva. Imajte na umu da smo u prethodnom PUT-u proslijedili i naziv proizvoda i cijenu. A u PATCH-u - samo cijena. Odnosno, na poslužitelj smo poslali samo promijenjene podatke.
Trebate li PATCH - odlučite sami. Ali sjetite se onog programera za čitanje koda kojeg sam gore spomenuo.
DELETE /roba/(goodId)
Uklanjanje proizvoda
// Brisanje proizvoda // DELETE /goods/(goodId) if ($method === "DELETE" && count($urlData) === 1) ( // Dohvati ID proizvoda $goodId = $urlData; // Izbriši proizvod iz baze podataka... // Ispis odgovora klijentu echo json_encode(array("method" => "DELETE", "id" => $goodId));
Testiranje s konzole
$.ajax((url: "/examples/rest/goods/20", metoda: "DELETE", dataType: "json", uspjeh: funkcija(odgovor)(console.log("odgovor:", odgovor))) )
Curl -X DELETE https://site/examples/rest/goods/20 -i
Sa zahtjevom DELETE je sve jasno. Sada pogledajmo rad s korisnicima - korisnički usmjerivač i, sukladno tome, datoteku users.php
GET /korisnici/(userId)
Dohvaćanje svih korisničkih podataka. Ako je GET zahtjev kao /korisnici/(userId), tada ćemo vratiti sve podatke o korisniku ako su dodatno navedeni /info ili /narudžbe, zatim, sukladno tome, samo opće informacije ili popis narudžbi.
// Funkcija usmjerivača route($method, $urlData, $formData) ( // Dobivanje svih informacija o korisniku // GET /users/(userId) if ($method === "GET" && count($urlData) = = = 1) ( // Dohvati ID proizvoda $userId = $urlData; // Ekstrahiraj sve podatke o korisniku iz baze podataka... // Ispis odgovora klijentu echo json_encode(array("method" => " GET", "id" = > $userId, "info" => array("email" => " [e-mail zaštićen]", "name" => "Webdevkin"), "orders" => array(array("orderId" => 5, "summa" => 2000, "orderDate" => "01/12/2017"), array (" orderId" => 5000, "orderDate" => "02/03/2017")))); // Vrati zaglavlje pogreške ("HTTP/1.0 400 Bad Request" echo json_encode( array("error" => "Loš zahtjev"));
Testiranje s konzole
$.ajax((url: "/examples/rest/users/5", metoda: "GET", dataType: "json", uspjeh: funkcija(odgovor)(console.log("odgovor:", odgovor))) )
Curl -X GET https://site/examples/rest/users/5 -i
GET /users/(userId)/info
Opći podaci o korisniku
// Dobivanje općih informacija o korisniku // GET /users/(userId)/info if ($method === "GET" && count($urlData) === 2 && $urlData === "info") ( / / Dohvaćanje id-a proizvoda $userId = $urlData; // Ekstrahiraj opće podatke o korisniku iz baze podataka... // Izlaz odgovora klijentu echo json_encode(array("method" => "GET", "id " => $userId, " info" => array("email" => " [e-mail zaštićen]", "name" => "Webdevkin"))); povratak; )
Testiranje s konzole
$.ajax((url: "/examples/rest/users/5/info", metoda: "GET", dataType: "json", uspjeh: funkcija(odgovor)(console.log("odgovor:", odgovor) )))
Curl -X GET https://site/examples/rest/users/5/info -i
GET /users/(userId)/orders
Dobivanje popisa korisničkih narudžbi
// Primi korisničke narudžbe // GET /users/(userId)/orders if ($method === "GET" && count($urlData) === 2 && $urlData === "orders") ( // Dobij ID proizvoda $userId = $urlData; // Dohvaćanje podataka o korisničkim narudžbama iz baze podataka... // Izlaz odgovora klijentu echo json_encode(array("method" => "GET", "id" => $ userId, "narudžbe" => niz(niz("orderId" => 5, "summa" => 2000, "orderDate" => "01/12/2017"), array("orderId" => 8, "summa " => 5000, "orderDate " => "02/03/2017")))); povratak; )
Testiranje s konzole
$.ajax((url: "/examples/rest/users/5/orders", metoda: "GET", dataType: "json", uspjeh: funkcija(odgovor)(console.log("odgovor:", odgovor) )))
Curl -X GET https://site/examples/rest/users/5/orders -i
Rezultati i izvori
Izvori iz primjera članaka -
Kao što vidite, organizacija podrške za REST API u izvornom php-u nije bila tako teška i na potpuno legalne načine. Glavna stvar je podrška za rute i nestandardne PHP metode PUT, PATCH i DELETE.
Glavni kod koji implementira ovu podršku stane u 3 tuceta redaka index.php. Ostatak je samo pojas koji se može implementirati na bilo koji način. Predložio sam da to učinite u obliku plug-in datoteka usmjerivača, čija imena odgovaraju entitetima vašeg projekta. Ali možete upotrijebiti svoju maštu i pronaći zanimljivije rješenje.
Prvo ćemo poboljšati stranicu za registraciju dodavanjem mogućnosti učitavanja avatara. Izvorna slika mora biti u jpg, gif ili png formatu. Također ne bi trebao biti veći od 2 MB. Ne brinite, nakon što ga skripta komprimira, veličina avatara bit će oko 3 kb i jpg format. Otvorite stranicu reg.php i dodajte ga u oznaku < oblik> crta enctype="multipart/form-data", kao u primjeru: