A PHP szuperglobális változói speciális típusú változók, amelyek előre meghatározottak és globális hatókörrel rendelkeznek. Ez azt jelenti, hogy a PHP-szkript bármely részéből, beleértve a függvényeket, osztályokat és fájlokat, elérhetők.
Miért hasznosak a szuperglobálisok?
- Globális
hatókör: Bárhonnan elérhetők a kódban, így könnyű adatokat
továbbítani a különböző részei között.
- Előre
meghatározott értékek: Automatikusan feltöltődnek
adatokkal a felhasználói bemenetből, szerverinformációkból vagy
HTTP-fejlécekből.
- Elnevezési
konvenció: Mindig egy aláhúzással kezdődnek, pl.
$_GET
,$_POST
, segítve a megkülönböztetést a szokásos változóktól.
6.1 $_GET
A $_GET szuperglobális változó egy asszociatív tömb, amely
a böngésző URL-jén keresztül, a HTTP GET módszerrel átadott adatokat
tartalmazza. A GET módszert általában olyan kérések esetén használják, amelyek
nem módosítanak adatokat a szerveren (pl. adatkeresésnél). Ezek az adatok az
URL-ben jelennek meg a kérdőjel (?
)
után, ahol a kulcs-érték párokat amperszand (&
)
jel választja el egymástól.
Hogyan működik a
$_GET?
Az URL egy adott oldalhoz való hozzáférést biztosít, és gyakran tartalmazhat
paramétereket, amelyeket a szerver felhasználhat a válasz személyre szabásához.
Például, ha a felhasználó egy űrlapot tölt ki és a GET módszerrel küldi el az
adatokat, akkor ezek az adatok az URL részeivé válnak.
Példa URL:
example.com/index.php?name=János&age=25
Ebben az esetben az URL két paramétert tartalmaz:
name
: ennek az értékeJános
age
: ennek az értéke25
A PHP $_GET tömbje ezeket a paramétereket automatikusan
feldolgozza, és kulcs-érték párokként tárolja. Tehát a fenti példa esetén a $_GET['name']
értéke János
, és a $_GET['age']
értéke 25
.
Az URL-ből kapott
paraméterek használata a $_GET-tel
Amikor a szerver fogad egy GET kérésű URL-t, a PHP a $_GET
tömbben tárolja az összes átadott paramétert. Ezeket a paramétereket a szkript
bárhonnan elérheti és feldolgozhatja.
// Ellenőrizzük, hogy a GET paraméterek léteznek-e
if (
isset(
$_GET[
'name']) &&
isset(
$_GET[
'age'])) {
// Ha igen, kiírjuk a nevét és az életkorát
echo
"Név: " .
$_GET[
'name'] .
", Kor: " .
$_GET[
'age'];
}
- Az
isset()
függvény használatával ellenőrizzük, hogy a paraméterek léteznek-e a $_GET tömbben. Ez azért fontos, mert ha egy paraméter nincs megadva az URL-ben, a PHP hibaüzenetet adna, ha közvetlenül próbálnánk meg elérni. - Ha a paraméterek léteznek, akkor azokat a $_GET
tömbből kiolvassuk, és egyszerűen megjelenítjük a felhasználónak.
Példa URL:
example.com/index.php?name=János&age=25
URL-ből kiolvasott eredmény:
Név: János, Kor: 25
Mire használható a
$_GET?
1.
Adatok továbbítása URL-ben: A $_GET
segítségével egyszerűen továbbíthatunk adatokat az URL-en keresztül, például
keresési lekérdezéseket vagy szűrési paramétereket. Ezek az adatok
felhasználhatók a szerveroldalon a keresési eredmények vagy a tartalom
szűréséhez.
- Példa:
example.com/search.php?q=php+tutorials
keresési lekérdezés küldése.
2.
Oldalak személyre szabása: A $_GET
tömb felhasználható arra, hogy különböző paraméterek alapján módosítsuk a
weboldal tartalmát. Például egy webshopban a felhasználó kiválaszthat egy
kategóriát, és a GET paraméterek alapján csak az adott kategória termékeit
jelenítjük meg.
- Példa:
example.com/shop.php?category=electronics
3.
Kis méretű adatok továbbítása: A GET
módszer korlátozott mennyiségű adatot képes továbbítani (általában néhány ezer
karakter), így ideális kis méretű adatok, például űrlapadatok vagy linkek
továbbítására.
Fontos megjegyzések:
1.
Biztonság:
- A GET módszerrel küldött adatok az URL-ben
jelennek meg, így láthatók a böngésző címsorában és elmenthetők a böngésző
előzményeibe. Emiatt érzékeny adatokat (például jelszavakat vagy banki
adatokat) soha nem szabad GET-tel továbbítani.
- A felhasználó az URL-ben lévő adatokat
manipulálhatja. Ezért mindig ellenőrizni és szűrni kell a GET
paramétereket, hogy elkerüljük a biztonsági problémákat, például az SQL
injekciót vagy a XSS (cross-site scripting) támadásokat.
Példa szűrésre:
$name =
htmlspecialchars(
$_GET[
'name']);
// Speciális karakterek átalakítása
2.
GET vs POST: A GET módszert főként
olyan kérésekhez használjuk, amelyek nem változtatják meg az adatokat a
szerveren, például keresési vagy szűrési kérésekhez. A POST módszert akkor
használjuk, ha a felhasználó adatokat küld be (pl. űrlapok), és ezek az adatok
nagyobbak, vagy érzékenyebbek.
3.
Adatmennyiség korlátozása: A GET
módszerrel küldött adatok mérete általában korlátozott (a böngésző és a szerver
beállításaitól függően), míg a POST módszerrel nagyobb mennyiségű adat is
továbbítható.
A $_GET szuperglobális változó egy rendkívül hasznos
eszköz, amely lehetővé teszi a fejlesztők számára, hogy az URL-ből könnyedén
hozzáférjenek a felhasználói adatokhoz. Ez különösen hasznos keresések,
szűrések és egyéb egyszerű adatok továbbítására a böngészőből a szerverre.
Azonban mindig figyelni kell a biztonsági szempontokra, és megfelelően szűrni
kell a beérkező adatokat.
6.2 $_POST
A $_POST szuperglobális változó egy asszociatív tömb, amely
a HTTP POST módszerrel küldött adatokat tartalmazza. A POST módszer az egyik
leggyakoribb módja annak, hogy az űrlapok adatait a szerverre továbbítsuk,
különösen olyan esetekben, amikor nagyobb mennyiségű adatot (pl. szöveges
mezők, fájlok) vagy érzékeny információkat (pl. jelszavakat) kell küldeni. A $_POST
adatokat nem jelenítik meg az URL-ben, ami biztonságosabbá teszi bizonyos
típusú adatküldések esetén.
Hogyan működik a
$_POST?
Amikor egy felhasználó egy HTML formot kitölt és elküldi, a böngésző az
űrlap adatait a szerverre küldi egy HTTP kérésben. Ha az űrlap POST
módszerrel van elküldve, az adatokat nem látjuk az URL-ben, hanem a kérés testében
kerülnek továbbításra. A PHP a szerveren automatikusan feldolgozza ezt a
kérést, és az adatokat a $_POST szuperglobális tömbben
tárolja.
Példakód:
Egy egyszerű HTML űrlap, amely POST módszerrel küldi el az adatokat a
szerverre:
<form method="POST" action="submit.php">
<input type="text" name="name" placeholder="Név">
<input type="submit" value="Küldés">
</form>
- method="POST":
Ez meghatározza, hogy a form adatait a POST módszerrel küldjük el.
- action="submit.php":
Az űrlap adatainak céloldala, amely a form feldolgozásáért felelős.
PHP rész:
// submit.php fájl
if (
isset(
$_POST[
'name'])) {
echo
"Küldött név: " .
$_POST[
'name'];
}
- Az isset() függvényt
használjuk annak ellenőrzésére, hogy a felhasználó ténylegesen küldött-e
adatot az űrlapról. Ha igen, az adat a $_POST['name']
tömbben található, és kiírjuk a megadott nevet.
Példa működés:
Tegyük fel, hogy a felhasználó az űrlapon a következő adatokat adja meg:
- Név: Péter
Miután a felhasználó rákattint a „Küldés” gombra, a böngésző elküldi az
adatokat a szerverre POST kéréssel. A submit.php feldolgozza
az adatokat, és a következő eredményt adja:
Kü
ldö
tt
né
v:
Pé
ter
A POST módszer
előnyei
1.
Adatvédelem: Mivel a POST módszerrel
küldött adatok nem jelennek meg az URL-ben, biztonságosabb, különösen érzékeny
információk, mint például jelszavak vagy személyes adatok továbbításakor.
2.
Nagyobb adatmennyiség: A POST módszer
lehetővé teszi, hogy nagyobb mennyiségű adatot küldjünk a szerverre, míg a GET
módszernél van egy korlátozás az URL maximális hosszára (böngésző és szerver
korlátok miatt).
3.
Bonyolultabb űrlapok kezelése: A POST
módszer különösen hasznos összetettebb űrlapok esetében, amelyek fájlokat, több
soros szöveget vagy más bonyolult struktúrákat tartalmaznak.
Mire használható a
$_POST?
1.
Űrlapadatok továbbítása: A $_POST
használható egyszerű űrlapok adatainak továbbítására, például felhasználói
regisztrációs űrlapokra, bejelentkezési oldalakra, vagy kapcsolatfelvételi
űrlapokra.
2.
Fájlok feltöltése: A $_POST
módszerrel könnyen kezelhetjük a fájlokat is, amikor egy űrlapon keresztül
fájlokat töltenek fel. Ehhez kombinálhatjuk a $_FILES
szuperglobális változóval.
3.
Jelszavak és érzékeny adatok kezelése:
A POST módszer sokkal biztonságosabb az olyan űrlapokhoz, amelyek érzékeny
adatokat kérnek, mivel ezek nem lesznek láthatók az URL-ben.
Példakód jelszavak
küldésére:
<form method="POST" action="login.php">
<input type="text" name="username" placeholder="Felhasználónév">
<input type="password" name="password" placeholder="Jelszó">
<input type="submit" value="Bejelentkezés">
</form>
A fent említett űrlap a felhasználónevet és a jelszót POST módszerrel küldi
el a szerverre, anélkül, hogy ezek megjelennének az URL-ben.
Fontos megjegyzések:
1.
Biztonság:
- Bár a POST módszer biztonságosabb a GET-nél, nem jelent
önmagában teljes védelmet. Mindig használni kell biztonsági
intézkedéseket, például HTTPS-t az adatok titkosított továbbításához, és
érvényesíteni kell az adatokat a szerver oldalon is.
Példa érvényesítésre:
$name =
htmlspecialchars(
$_POST[
'name']);
// HTML karakterek átalakítása
2.
Nagy mennyiségű adat kezelés: A POST
módszerrel nagy mennyiségű adatot küldhetünk, például hosszabb szöveges
adatokat vagy több mezővel rendelkező űrlapokat.
3.
Hozzáférés szűrés: A POST módszer
használatával küldött adatok mindig a $_POST szuperglobálison
keresztül érhetők el, függetlenül attól, hogy hány oldal van érintve. Ez azt
jelenti, hogy minden egyes oldal, amelyhez hozzáférünk, hozzáférhet az űrlap
által küldött adatokhoz is.
GET vs POST
összehasonlítás:
·
GET:
- Az adatok az URL-ben jelennek meg.
- Korlátozott mennyiségű adat küldhető (általában
néhány ezer karakter).
- Nem alkalmas érzékeny adatok továbbítására.
- Általában adatlekérdezésre vagy oldalfrissítésekre
használják.
·
POST:
- Az adatok a kérés testében vannak, nem láthatók az
URL-ben.
- Nagyobb mennyiségű adat küldhető.
- Alkalmas érzékeny adatok küldésére (pl.
jelszavak).
- Általában adatbeküldésre és fájlok feltöltésére
használják.
A $_POST szuperglobális változó hatékony és biztonságos
módszer a felhasználói adatok szerverre történő továbbítására. Ez a módszer
különösen hasznos olyan helyzetekben, amikor érzékeny adatokat kell
továbbítani, vagy nagyobb mennyiségű adatot kell feldolgozni. A POST módszer
segítségével könnyedén elérhetők és feldolgozhatók a felhasználói adatok, miközben
az adatok védelmét is biztosítja.
6.3 $_SESSION
A $_SESSION szuperglobális lehetővé teszi a munkamenetek
kezelését a PHP-ban. Ez különösen hasznos, ha több oldalkérésen keresztül
szeretnénk megőrizni a felhasználói adatokat. A munkamenet (session) egy
szerveroldalon tárolt adat, amely egyedi felhasználókhoz van kötve. Minden
felhasználó saját munkamenet-azonosítót (session ID) kap, amely alapján a
szerver nyomon tudja követni a felhasználót, még akkor is, ha az átlép egyik
oldalról a másikra.
Hogyan működik a
munkamenet?
1.
Munkamenet indítása: A PHP-ban a
munkamenet-kezelést a session_start()
függvénnyel indítjuk. Ennek hatására a szerver létrehozza vagy folytatja az
adott felhasználóhoz tartozó munkamenetet, ami a felhasználó böngészőjében
egyedileg azonosítva van egy session ID nevű cookie
segítségével.
2.
Adatok tárolása: Miután a munkamenet
elindult, a $_SESSION
szuperglobális tömbön keresztül bármilyen adatot tárolhatunk a szerveren, amely
a felhasználóra vonatkozik. Az adatokat ezután több oldalkérés során is
elérhetjük.
3.
Adatok elérése: A felhasználóra
vonatkozó adatokat bármelyik oldalról elérhetjük, ahol a session_start()
függvény hívva van.
4.
Munkamenet befejezése: Ha már nincs
szükség a munkamenetre, vagy a felhasználó kijelentkezik, a munkamenet megszüntethető
a session_destroy()
függvénnyel. Ez törli a szerveren tárolt adatokat és érvényteleníti a
felhasználó session ID-jét.
Részletes példa a
munkamenet használatára:
1. Oldal: Munkamenet indítása és adat tárolása; pl: belépés egy
oldalra
// Munkamenet indítása
session_start();
// Adat tárolása a munkamenetben
$_SESSION[
'user'] =
"Lucifer";
// Az adat elérése
echo
"Üdvözöllek, " .
$_SESSION[
'user'];
- A
session_start()
elindítja a munkamenetet. - A
$_SESSION['user']
változóban tároljuk a felhasználó nevét, amelyet most "Lucifer"-nek állítunk be. - Ez
az adat elérhető minden későbbi oldalon, amely ugyanennek a munkamenetnek
a része.
2. Oldal: Munkamenet adatainak elérése; a személyes adatok elérése
session_start();
// Ellenőrzés, hogy van-e munkamenet adat
if (
isset(
$_SESSION[
'user'])) {
echo
"Üdv újra, " .
$_SESSION[
'user'];
}
else {
echo
"Nincs bejelentkezett felhasználó.";
}
- A
session_start()
függvény folytatja a már meglévő munkamenetet, így elérhetjük a korábban tárolt adatokat. - A
$_SESSION['user']
változóban elérjük a felhasználó nevét, amit korábban "János"-nak állítottunk be.
3. Oldal: Munkamenet törlése -> kijelentkezés
// Munkamenet indítása
session_start();
// Munkamenet adatainak törlése
session_unset();
// Törli a $_SESSION tömb összes elemét
// Munkamenet megszüntetése
session_destroy();
// A munkamenet teljes megszüntetése
- A
session_unset()
törli a munkamenetben tárolt összes adatot. - A
session_destroy()
teljesen megszünteti a munkamenetet, ami azt jelenti, hogy a felhasználó session ID-je érvénytelen lesz, és a következő kéréskor új munkamenetet kell indítani.
Munkamenetek előnyei:
- Állapot
megtartása: Lehetővé teszi, hogy az alkalmazás
"emlékezzen" a felhasználóról több kéréssel kapcsolatban.
- Biztonság:
A munkamenet-adatok szerveroldalon vannak tárolva, így kevésbé érzékenyek
a kliensoldali manipulációkra, mint például a cookie-k.
- Egyszerű
használat: Könnyű implementálni és felhasználni bármilyen
PHP projektben.
Fontos tudnivalók:
- session_start():
Ezt minden olyan oldal tetején meg kell hívni, ahol a munkamenet adatokat
használni szeretnénk.
- session
ID: A munkamenet azonosításához szükséges az egyedi
session ID, amit a PHP automatikusan kezel.
- Biztonság:
Fontos a munkamenetek biztonságos kezelése, például titkosított kapcsolat
(HTTPS) használatával, hogy elkerüljük a session hijacking-et (munkamenet
eltérítését).
Ez az eljárás biztosítja, hogy a felhasználó által megadott információk több
oldal kérésén keresztül megőrződjenek, például bejelentkezéskor vagy kosár
funkció esetén.
6.4 $_COOKIE
A $_COOKIE
szuperglobális
a sütik segítségével tárolt adatokat tartalmazza.
// Süti beállítása
setcookie(
"username",
"János",
time() + (
86400 *
30),
"/");
// 30 napig érvényes
// Süti elérése
if (
isset(
$_COOKIE[
'username'])) {
echo
"Süti tartalma: " .
$_COOKIE[
'username'];
}
Mi az a süti?
A süti (cookie) egy kis adatcsomag, amelyet a webkiszolgáló (szerver) küld a
felhasználó böngészőjébe, és amelyet a böngésző minden későbbi kéréskor
visszaküld a szervernek. A sütik általában olyan információkat tárolnak, mint
például a felhasználó bejelentkezési állapota, nyelvi preferenciák vagy egyéb
beállítások.
Sütik beállítása
A setcookie()
függvénnyel
állíthatunk be sütiket. A függvény szintaxisa a következő:
setcookie(name, value, expire, path, domain, secure, httponly);
- name: A süti neve.
- value: A süti értéke.
- expire: Az időpont,
ameddig a süti érvényes lesz, UNIX időbélyeg formájában. (pl.
time() + (86400 * 30)
- 30 nap múlva) - path: A weboldal azon
útvonala, amelyhez a süti érvényes. Ha "/"-ot adunk meg, akkor
az egész weboldalon érvényes lesz.
- domain: Az a domain,
amelyhez a süti érvényes.
- secure: Ha
true
, akkor a süti csak HTTPS kapcsolaton keresztül lesz elküldve. - httponly: Ha
true
, akkor a süti csak HTTP kéréseken keresztül érhető el, nem JavaScriptből.
Példa sütik beállítására:
setcookie(
"username",
"János",
time() + (
86400 *
30),
"/");
// 30 napig érvényes
Ebben a példában a süti neve username
,
értéke János
, és 30 napig
lesz érvényes, az egész weboldalon elérhető.
Sütik elérése
A $_COOKIE
szuperglobális
tömb tartalmazza az összes sütit, amelyet a böngésző visszaküldött a
szervernek. Az egyes sütik értékei a tömb kulcsai alapján érhetők el.
Példa sütik elérésére:
if (
isset(
$_COOKIE[
'username'])) {
echo
"Süti tartalma: " .
$_COOKIE[
'username'];
}
else {
echo
"A süti nem létezik.";
}
Ebben a példában ellenőrizzük, hogy a username
nevű süti létezik-e, és ha igen, kiírjuk annak értékét. Ha nem létezik, akkor
egy üzenetet adunk vissza.
Fontos tudnivalók
1.
Sütik és biztonság: A sütik nem
titkosítva tárolják az adatokat, ezért érzékeny információk tárolására nem
javasoltak. Ha érzékeny adatokat kell tárolni, használjunk HTTPS-t, és
lehetőség szerint titkosítsuk az adatokat.
2.
Sütik élettartama: A sütik
élettartamát az expire
paraméter határozza meg. Ha nem állítunk be expire
időpontot, a süti csak a böngésző munkamenete alatt lesz elérhető.
3.
Sütik és adatvédelem: A sütik
használata adatvédelmi kérdéseket vethet fel, ezért fontos, hogy a
felhasználókat tájékoztassuk arról, hogy sütiket használunk, és biztosítsuk,
hogy megfeleljünk a vonatkozó adatvédelmi törvényeknek (pl. GDPR).
6.5 $_REQUEST
A $_REQUEST változó egy speciális szuperglobális tömb a
PHP-ban, amely lehetővé teszi, hogy a felhasználói bemenetet egyetlen helyről
érjük el, függetlenül attól, hogy az adatokat GET, POST vagy COOKIE módszerrel
küldték. Ez a tulajdonság kényelmes lehet az adatok lekérésekor, de bizonyos
biztonsági kockázatokat is hordoz, mivel nem különbözteti meg az adatforrásokat.
Hogyan működik a
$_REQUEST?
A PHP automatikusan feltölti a $_REQUEST tömböt az alábbi
adatokkal:
- $_GET: Az URL-ben lévő
paraméterekkel érkező adatokat tartalmazza.
- $_POST: A HTTP POST
módszerrel küldött adatokat tartalmazza (például űrlapok adatai).
- $_COOKIE: A felhasználói
böngészőben tárolt sütiket tartalmazza, amelyeket a szerver felé
továbbítanak.
A $_REQUEST egy kombinált tömb, ami azt jelenti, hogy ezek
az adatok egyesítve vannak egyetlen tömbben, és a tömb kulcsai a változók nevei
(mint $_GET
, $_POST
vagy $_COOKIE
esetében).
Előnyei:
- Egyszerűsített hozzáférés:
Nem kell külön ellenőrizni, hogy az adat GET, POST vagy COOKIE módszerrel
érkezett. A $_REQUEST segítségével egyetlen helyről elérhetők.
- Rugalmasság: Ha az adat
forrása nem fontos, és csak a változó létezése érdekel, a $_REQUEST
egyszerűbbé teszi az adatok kezelését.
Hátrányai:
- Biztonsági kockázat: Mivel
a $_REQUEST nem különbözteti meg az adatforrásokat, nehéz lehet
biztosítani, hogy egy adat megbízható forrásból származik-e. Például egy $_POST
változó könnyen felülírható egy $_GET
vagy $_COOKIE változóval. Ezért
a biztonságos és pontos adatkezelés érdekében inkább konkrétan a $_GET,
$_POST, vagy $_COOKIE
szuperglobálisokat érdemes használni.
- Nem specifikus: A
$_REQUEST nem jelzi, hogy az adat melyik módszerrel érkezett, ezért
elveszhet az az információ, hogy egy adatot GET, POST vagy COOKIE
módszerrel kaptunk-e meg. Ez zavaró lehet egyes esetekben, például ha POST
és GET változók azonos nevűek.
Példa a $_REQUEST
használatára:
Adatküldés GET vagy POST módszerrel:
// Ha egy űrlap GET vagy POST módszerrel küldi az adatokat, mindkettőt elérhetjük $_REQUEST segítségével:
if (
isset(
$_REQUEST[
'name'])) {
echo
"Név: " .
$_REQUEST[
'name'];
}
GET módszer esetén:
// URL: example.com/page.php?name=János
// Eredmény: Név: János
POST módszer esetén:
<form method=
"POST" action=
"page.php">
<input type=
"text" name=
"name" value=
"Péter">
<input type=
"submit" value=
"Küldés">
</form>
// POST kérés után: Név: Péter
COOKIE használata:
// Beállítunk egy cookie-t:
setcookie(
"name",
"Kata",
time() +
3600);
// 1 órán át érvényes
// $_REQUEST segítségével elérhetjük a cookie-t:
if (
isset(
$_REQUEST[
'name'])) {
echo
"Név: " .
$_REQUEST[
'name'];
}
Ebben az esetben a $_REQUEST['name']
tartalmazhatja a sütit is, ha létezik.
$_REQUEST
használatának kockázatai:
Egy egyszerű példával bemutatom, miért kevésbé biztonságos a $_REQUEST
használata:
Probléma: GET és POST ütközés Ha ugyanazt a kulcsot
használjuk GET és POST változókban, a $_REQUEST a két forrásból érkező adatokat
összemossa, és előnyben részesítheti az egyiket (általában a GET-et).
Példa:
// URL: example.com/page.php?name=Éva
<form method=
"POST" action=
"page.php">
<input type=
"text" name=
"name" value=
"Kata">
<input type=
"submit" value=
"Küldés">
</form>
if (
isset(
$_REQUEST[
'name'])) {
echo
"Név: " .
$_REQUEST[
'name'];
}
Ha egy felhasználó POST módszerrel küldi az adatot ("Kata"), de a
GET kérés tartalmaz egy "name" paramétert is ("Éva"), akkor
a $_REQUEST['name']
valószínűleg az URL-ben lévő GET paramétert fogja visszaadni ("Éva"),
és nem a POST kéréssel küldött adatot ("Kata"). Ez biztonsági
kockázatot jelenthet, például amikor érzékeny adatokat POST módszerrel
továbbítunk.
Mikor érdemes
használni a $_REQUEST-t?
- Ha az adat forrása nem lényeges, és egyszerűen csak el
akarjuk érni a változót, függetlenül attól, hogy GET, POST vagy COOKIE
módszerrel érkezett.
- Ha gyors prototípust készítünk, és a biztonság nem elsődleges
szempont.
Mikor ne használjuk a
$_REQUEST-t?
- Ha a biztonság kritikus, például érzékeny adatokat
továbbítunk (pl. felhasználói bejelentkezés, jelszó). Ilyen esetben a $_POST
használata javasolt.
- Ha pontosan tudni akarjuk, hogy az adat GET vagy POST
módszerrel érkezett.
Összefoglalás:
- $_REQUEST: Kényelmes módja
az adatok elérésének, ha nem számít, hogy GET, POST vagy COOKIE módszerrel
érkeztek.
- Használata biztonsági kockázatot rejthet:
Ügyeljünk arra, hogy a $_REQUEST nem különbözteti meg az adatforrásokat,
így könnyen ütközhetnek a változók.
- Biztonságosabb alternatívák:
Ha fontos, hogy az adat milyen módszerrel érkezett, inkább használjuk a
konkrét szuperglobális változókat: $_GET, $_POST,
vagy $_COOKIE.
A $_REQUEST tehát kényelmes, de fokozott figyelmet igényel a biztonságos
használat érdekében.
6.6 $_FILES
A $_FILES szuperglobális segítségével a PHP képes kezelni a
HTTP POST kéréseken keresztül érkező fájlokat. Ezt általában űrlapokban
használják, amikor a felhasználóknak lehetőségük van fájlokat feltölteni a
szerverre. A $_FILES egy tömb, amely tartalmazza a feltöltött
fájlokkal kapcsolatos információkat, például a fájl nevét, típusát, méretét és
az ideiglenes helyét, ahova a szerver elmenti a fájlt a feldolgozás előtt.
Hogyan működik a
fájlfeltöltés a PHP-ban?
HTML űrlap
létrehozása fájl feltöltéséhez
Az űrlapban használnunk kell a enctype="multipart/form-data"
attribútumot, hogy a fájlokat megfelelően továbbítsuk a szervernek. Ez az
attribútum lehetővé teszi, hogy a böngésző többféle adatot is küldjön, például
szöveget és fájlokat egyaránt.
Példa űrlap:
html
Kód másolása
<form method="POST" action="upload.php" enctype="multipart/form-data">
<input type="file" name="fileToUpload">
<input type="submit" value="Feltöltés">
</form>
- Az űrlap egy
fileToUpload
nevű input mezőt tartalmaz, amely lehetővé teszi a felhasználó számára, hogy fájlt válasszon ki a feltöltéshez. - Az
enctype="multipart/form-data"
fontos, mert enélkül a fájl nem kerülne megfelelően továbbításra a szervernek.
A feltöltött fájl
feldolgozása a szerveren
Amikor a felhasználó rákattint az "Feltöltés" gombra, a PHP a $_FILES
tömbbe tölti a fájllal kapcsolatos adatokat.
Az alábbi $_FILES tömb tartalmazza a következő kulcsokat
minden fájlhoz:
- name: A feltöltött fájl
eredeti neve.
- type: A fájl MIME típusa
(pl.
image/jpeg
,application/pdf
). - tmp_name: Az ideiglenes
hely, ahol a fájl tárolva van a szerveren, amíg fel nem dolgozzuk.
- error: Hibakód, amely
jelzi, hogy történt-e hiba a feltöltés során.
- size: A fájl mérete
bájtokban.
PHP kód a fájl feltöltéséhez:
// Ellenőrizzük, hogy történt-e fájlfeltöltés
if (
isset(
$_FILES[
'fileToUpload'])) {
// A feltöltött fájl neve
$fileName =
$_FILES[
'fileToUpload'][
'name'];
// A fájl ideiglenes helye a szerveren
$fileTmpName =
$_FILES[
'fileToUpload'][
'tmp_name'];
// A fájl áthelyezése a cél könyvtárba
if (
move_uploaded_file(
$fileTmpName,
"uploads/" .
$fileName)) {
echo
"A fájl sikeresen feltöltve: " .
$fileName;
}
else {
echo
"Hiba történt a fájl feltöltése során.";
}
}
Részletezve a
feltöltési folyamatot:
1.
$_FILES['fileToUpload']['name']
:
A feltöltött fájl eredeti neve, amelyet a felhasználó a fájlkiválasztó mezőn
keresztül tölt fel. Például: kep.jpg
.
2.
$_FILES['fileToUpload']['tmp_name']
:
Ez az ideiglenes hely, ahol a fájl tárolva van a szerveren, amíg fel nem
dolgozzuk. Ez egy átmeneti fájl, amit a PHP automatikusan létrehoz.
3.
move_uploaded_file()
függvény: Ez a funkció áthelyezi a fájlt az ideiglenes helyről egy
állandó helyre a szerveren. Például a uploads/
könyvtárba helyezhetjük át. Fontos, hogy a cél könyvtár létezzen, és a
szervernek megfelelő írási jogai legyenek a fájl elmentéséhez.
4.
Hibaellenőrzés: A feltöltés során
előfordulhatnak hibák, amelyeket a $_FILES['fileToUpload']['error']
változó tartalmaz. Ennek segítségével ellenőrizhetjük, hogy történt-e probléma.
Hibakódok és
kezelésük:
A $_FILES['fileToUpload']['error'] egy hibakódot tartalmaz,
amely jelzi, hogy mi történt a fájl feltöltése során. A leggyakoribb hibakódok:
- UPLOAD_ERR_OK (0): A fájl
sikeresen feltöltődött.
- UPLOAD_ERR_INI_SIZE (1): A
fájl mérete meghaladja a
upload_max_filesize
irányelvben meghatározott méretet aphp.ini
fájlban. - UPLOAD_ERR_FORM_SIZE (2):
A fájl mérete meghaladja az űrlapon beállított maximális méretet (
MAX_FILE_SIZE
irányelv). - UPLOAD_ERR_PARTIAL (3): A
fájl csak részben lett feltöltve.
- UPLOAD_ERR_NO_FILE (4):
Nem töltöttek fel fájlt.
Például egy egyszerű hibakezelés így nézhet ki:
if (
$_FILES[
'fileToUpload'][
'error'] === UPLOAD_ERR_OK) {
// Fájl sikeresen feltöltve
}
else {
// Hiba történt
echo
"Hiba történt: " .
$_FILES[
'fileToUpload'][
'error'];
}
A fájlok méretének
korlátozása
A PHP beállításaiban korlátozhatjuk a feltöltött fájl maximális méretét a php.ini
fájlban a következő irányelvek
segítségével:
upload_max_filesize
: A feltöltött fájlok maximális mérete.post_max_size
: A POST adatok maximális mérete (beleértve a fájlokat).
Például:
ini fájlban:
upload_max_filesize =
2M
post_max_size =
8M
Biztonsági
megfontolások fájlfeltöltésnél:
1.
Fájl típusa és kiterjesztése ellenőrzése:
Mielőtt elfogadnánk a fájlokat, mindig ellenőrizzük a fájl típusát és
kiterjesztését. Ezt megtehetjük a $_FILES['fileToUpload']['type']
vagy a pathinfo()
függvény segítségével.
Például csak képfájlokat engedélyezhetünk:
$fileType =
mime_content_type(
$_FILES[
'fileToUpload'][
'tmp_name']);
if (
$fileType !=
"image/jpeg" &&
$fileType !=
"image/png") {
echo
"Csak JPEG és PNG fájlokat tölthet fel!";
exit();
}
2.
Fájlnevek kezelése: Ügyelni kell arra,
hogy a fájl neve ne tartalmazzon veszélyes karaktereket (pl. speciális
karakterek vagy útvonalak). Használhatjuk a basename()
függvényt a fájl nevének biztonságos kezelésére.
$fileName =
basename(
$_FILES[
'fileToUpload'][
'name']);
3.
Az ideiglenes fájl eltávolítása: Ha
nem helyezzük át a feltöltött fájlt, az ideiglenes fájl automatikusan törlődik
a szkript futásának végén. Azonban ha valamilyen hiba történik, manuálisan is
törölhetjük az ideiglenes fájlt a unlink()
függvénnyel.
A $_FILES szuperglobális egy hatékony eszköz a PHP-ban a
fájlok kezelésére. Lehetővé teszi, hogy a felhasználók fájlokat töltsenek fel a
szerverre, és ezeket az adatokat könnyen kezelhessük, feldolgozhassuk és
áthelyezhessük a kívánt helyre. A fájlfeltöltés során azonban különös figyelmet
kell fordítani a biztonsági megfontolásokra, például a fájl típusának és
méretének ellenőrzésére.
6.7 $_SERVER
A $_SERVER szuperglobális változó számos olyan információt
tartalmaz, amelyek a szerverrel, az aktuális kéréssel és a környezeti
változókkal kapcsolatosak. Ez egy asszociatív tömb, amely hozzáférést biztosít
a szerver által feldolgozott HTTP kérés részleteihez. Ezek az információk
hasznosak lehetnek például a kérési metódusok megértéséhez, a felhasználó által
látogatott oldal meghatározásához, vagy a kiszolgáló környezetének
lekérdezéséhez.
A $_SERVER tömb
kulcsai és gyakran használt elemei:
1. $_SERVER['REQUEST_METHOD']
:
Ez a kulcs megadja, hogy milyen módszerrel érkezett a kérés a szerverhez,
például GET, POST, PUT, vagy DELETE. Általában a GET és POST a leggyakrabban
használt HTTP módszerek a webalkalmazásokban.
echo
"A kérés módszere: " .
$_SERVER[
'REQUEST_METHOD'];
- Ha a kérés GET módszerrel érkezett, akkor az eredmény:
A kérés módszere: GET
- Ha a kérés POST módszerrel érkezett, akkor az eredmény:
A kérés módszere: POST
2. $_SERVER['SERVER_NAME']
:
Ez a kulcs megadja a szerver nevét, amely az aktuális szkriptet futtatja. Ez
általában a domain nevet jelenti, például example.com
.
echo
"A szerver neve: " .
$_SERVER[
'SERVER_NAME'];
- Eredményként a szerver neve jelenik meg, például:
A szerver neve: example.com
.
3. $_SERVER['SCRIPT_NAME']
:
Ez a kulcs megadja a futtatott PHP szkript elérési útját a szerveren. Ez
különösen hasznos lehet, ha dinamikusan szeretnénk meghatározni a jelenlegi
szkript helyét vagy URL-jét.
echo
"A szkript neve: " .
$_SERVER[
'SCRIPT_NAME'];
- Eredmény:
A szkript neve: /folder/file.php
, ami az aktuális szkript elérési útját jelzi.
4. $_SERVER['REMOTE_ADDR']
:
Ez a kulcs a kliens (felhasználó) IP-címét adja meg, amely kapcsolatba
lépett a szerverrel. Ez hasznos lehet például a felhasználói tevékenységek
nyomon követéséhez vagy biztonsági ellenőrzésekhez.
echo
"A felhasználó IP címe: " .
$_SERVER[
'REMOTE_ADDR'];
- Eredmény:
A felhasználó IP címe: 192.168.1.1
, vagy más IP-cím, amely a felhasználót azonosítja.
5. $_SERVER['HTTP_USER_AGENT']
:
Ez a kulcs a felhasználó böngészőjéről és eszközéről tartalmaz információkat.
Az HTTP_USER_AGENT
általában
egy hosszú karakterlánc, amely leírja a felhasználó által használt böngészőt,
az operációs rendszert, és egyéb releváns adatokat.
echo
"A böngésző adatai: " .
$_SERVER[
'HTTP_USER_AGENT'];
- Eredmény:
A böngésző adatai: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36
- Ez az adat segítséget nyújt abban, hogy megértsük, milyen
böngészőt és operációs rendszert használ a felhasználó.
6. $_SERVER['SERVER_PORT']
:
Ez a kulcs azt a portot adja meg, amelyen a szerver a kérést fogadta.
Például a legtöbb webhely alapértelmezett portja a 80-as (HTTP) vagy a 443-as
(HTTPS).
echo
"A szerver portja: " .
$_SERVER[
'SERVER_PORT'];
- Eredmény:
A szerver portja: 80
, ha a kérés HTTP-n keresztül érkezik, vagyA szerver portja: 443
, ha HTTPS-en keresztül.
7. $_SERVER['REQUEST_URI']
:
Ez a kulcs a teljes URI-t tartalmazza, amelyet a felhasználó kért. Ez
magában foglalja az útvonalat és az esetleges kérés paramétereit is. Ez hasznos
lehet, ha dinamikusan szeretnénk dolgozni az URL-ben található adatokkal.
echo
"A kérés URI-je: " .
$_SERVER[
'REQUEST_URI'];
- Eredmény:
A kérés URI-je: /products?category=books&item=123
, amely a kért oldal teljes URI-ját jelzi.
8. $_SERVER['HTTP_REFERER']
:
Ez a kulcs megadja annak az oldalnak az URL-jét, amelyről a felhasználó
érkezett az aktuális oldalra. Ez a referer URL hasznos lehet statisztikák
gyűjtésére vagy átirányítások kezelésére.
echo
"Honnan érkezett a felhasználó: " .
$_SERVER[
'HTTP_REFERER'];
- Eredmény:
Honnan érkezett a felhasználó: https://example.com/previous-page
, ami az előző oldal URL-jét jelzi.
Biztonsági
megfontolások:
- Adatvalidálás: Bár a $_SERVER
szuperglobális számos hasznos adatot szolgáltat, mindig ellenőrizni és
validálni kell az adatokat, különösen, ha külső forrásokból (pl.
HTTP_USER_AGENT
,HTTP_REFERER
) származnak. Ezeket az információkat a felhasználók manipulálhatják, ezért fontos, hogy ne bízzunk meg bennük vakon. - IP-címek és user agent: Az
IP-címek és a böngészők adatai hasznosak lehetnek, de nem mindig
megbízhatóak, mivel proxyk és VPN-ek használatával a felhasználók
elrejthetik valódi IP-jüket vagy megváltoztathatják a böngészőjük
azonosítóját.
A $_SERVER szuperglobális sokféle információt tartalmaz a
szerverről és az aktuális kérésről, így fontos eszköz a szerver állapotának és
a felhasználók tevékenységeinek megfigyelésére. A kérés módszere, a szerver
neve, a szkript útvonala, a felhasználói IP-cím és a böngésző adatai mind
könnyen hozzáférhetők a $_SERVER változóval, de fontos
figyelembe venni a biztonsági szempontokat és az adatok megfelelő validálását.
Összefoglalás
- $_GET:
URL-paraméterek kezelésére.
- $_POST:
Űrlapok POST metódusával küldött adatok kezelésére.
- $_SESSION:
Munkamenet alapú adatokat tárol több oldalon keresztül.
- $_COOKIE:
Kliens oldalon tárolt sütik kezelésére.
- $_REQUEST:
GET, POST, és COOKIE adatok egyesített elérésére.
- $_FILES:
Feltöltött fájlok kezelésére.
- $_SERVER:
Szerver és kérés információinak lekérésére.
A PHP szuperglobálisai hatékony eszközök a webes alkalmazásokban az adatok
kezelésére és továbbítására.
Nincsenek megjegyzések:
Megjegyzés küldése