Onion Information
Postavljanje datoteka na poslužitelj u jeziku PHP - GASERI
Jedna od funkcionalnosti HTTP poslužitelja je primanje datoteka koje korisnici žele postaviti, primjerice fotografija i audiovizualnih snimaka koje postavljaju na društvene mreže. Interpreter PHP-a podržava postavljanje datoteka korištenjem...
Onion Details
Page Clicks: 1
First Seen: 03/15/2024
Last Indexed: 10/23/2024
Onion Content
Preskoči na sadržaj Postavljanje datoteka na poslužitelj u jeziku PHP Jedna od funkcionalnosti HTTP poslužitelja je primanje datoteka koje korisnici žele postaviti, primjerice fotografija i audiovizualnih snimaka koje postavljaju na društvene mreže. Interpreter PHP-a podržava postavljanje datoteka korištenjem HTTP metoda POST i PUT . U nastavku prezentiramo oba načina te korištenje HTTP metode DELETE koje se koristi za brisanje datoteke. Postavljanje datoteke metodom POST Slično kako na poslužitelj metodom POST šaljemo podatke, možemo i postavljati datoteke . U cURL-u to činimo parametrom --form , odnosno -F , koji se za postavljanje datoteke imena pokloni.txt pod ključem popis_poklona na poslužitelj na adresi http://localhost:8000/ koristi na način: $ curl -F 'popis_poklona=@pokloni.txt' http://localhost:8000/ Na poslužiteljskoj strani u PHP-ovom polju $_FILES ( dokumentacija ) pojavit će se unos pod ključem "popis_poklona" koji predstavlja datoteku pokloni.txt . Iskoristit ćemo funkciju move_uploaded_file() ( dokumentacija ) da pomaknemo postavljenu datoteku s njezinog privremenog mjesta na mjesto na kojem želimo da bude. Trebat će nam i funkcija getcwd() ( dokumentacija ) kojom ćemo dohvatiti radni direktorij ugrađenog web poslužitelja u koji ćemo datoteke i spremati. Kod poslužitelja je sad oblika: POST / HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.72.0 > Accept: */* > Content-Length: 59347 > Content-Type: multipart/form-data ; boundary = ------------------------715051f75fe2b85e > * We are completely uploaded and fine * Mark bundle as not supporting multiuse POST /datoteke-za-djeda-mraza/ HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.72.0 > Accept: */* > Content-Length: 59347 > Content-Type: multipart/form-data ; boundary = ------------------------afd307b6d042449a > * We are completely uploaded and fine * Mark bundle as not supporting multiuse PUT /upload HTTP/1.1 > Host: localhost:8000 > User-Agent: curl/7.72.0 > Accept: */* > Content-Length: 59149 > Expect: 100 -continue > * Done waiting for 100 -continue 0 59149 0 --: -: - 0 :00:01 --: -: - 0 } [ 59149 bytes data ] * We are completely uploaded and fine * Mark bundle as not supporting multiuse Neće ići, hakeru! \n " ; } else { $webroot = getcwd (); unlink ( $webroot . $_SERVER [ "REQUEST_URI" ]); http_response_code ( 204 ); } Note Moguće je da ova varijanta programa još uvijek ima sigurnosnih propusta koji bi omogućili brisanje datoteke index.php uz korištenje naprednijih trikova, ali uzmimo da je za naše potrebe dovoljno dobra. Funkcija unlink() vratit će true ako je brisanje bilo uspješno, a false ako nije, primjerice zato što datoteka ne postoji ili zato što proces PHP-ovog ugrađenog poslužitelja nema pravo brisanja datoteke jer njene dozvole pristupa to zabranjuju. Zanemarimo do daljnjega probleme s dozvolama pa imamo kod oblika: Neće ići, hakeru! \n " ; } else { $webroot = getcwd (); $path = $_SERVER [ "REQUEST_URI" ]; if ( unlink ( $webroot . $path )) { echo " Datoteka $path uspješno obrisana. \n " ; } else { http_response_code ( 404 ); echo " Datoteka $path nije pronađena. \n " ; } U slučaju da je brisanje uspješno, ranije korišteni statusni kod 204 No Content zamijenili smo za zadani statusni kod 200 OK jer odgovor sadrži poruku Datoteka $path uspješno obrisana. . Promjena datoteke metodom PATCH HTTP metoda PATCH omogućuje djelomičnu promjenu postojećeg sadržaja na web poslužitelju ( više detalja o HTTP metodi PATCH na MDN-u ). Metoda PATCH proširuje specifikaciju HTTP-a 1.1 ( RCF 2616 pod naslovom Hypertext Transfer Protocol -- HTTP/1.1 ) i standardizirana je u RFC-u 5789 pod naslovom PATCH Method for HTTP . Kod korištenja ove metode tijelo zahtjeva sadrži upute koje izmjene sadržaja treba napraviti. Pritom standard ne definira kako se te upute trebaju biti zapisane i prepušta taj odabir razvijateljima implementacije poslužitelja i klijenta. U praksi se najčešće koristi zapis izmjena temeljen na JSON-u iz RFC-a 6902 naslovljenog JavaScript Object Notation (JSON) Patch . Metodu PATCH spominjemo radi potpunosti i nećemo je ovdje detaljnije koristiti. Author: Vedran Miletić