بخش نهم: آرایههای فوقسراسری و کاربردهای عملی
۹-۱. مفهوم آرایه فوقسراسری
آرایههای فوقسراسری (Superglobals) آرایههایی هستند که در همه بخشهای برنامه، حتی داخل توابع، بدون نیاز به تعریف متغیر سراسری قابل دسترسی هستند. این آرایهها توسط PHP ساخته میشوند و نام آنها با حرف بزرگ شروع میشود.
آرایههای فوقسراسری اصلی عبارتاند از:
| آرایه | کاربرد |
|---|---|
$_GET |
دادههای ارسالشده با روش GET |
$_POST |
دادههای ارسالشده با روش POST |
$_REQUEST |
ترکیب دادههای GET و POST و COOKIE |
$_COOKIE |
دادههای کوکی |
$_SESSION |
دادههای نشست |
$_SERVER |
اطلاعات سرور و محیط اجرا |
$_FILES |
فایلهای آپلودشده |
$_ENV |
متغیرهای محیطی |
۹-۲. آرایه $_GET
دادههایی را نگه میدارد که از طریق آدرس (Query String) ارسال میشوند. برای مثال، اگر آدرس زیر درخواست شود:
page.php?name=Ali&age=17
آنگاه:
<?php
echo $_GET["name"]; // Ali
echo $_GET["age"]; // 17
?>
نکته امنیتی: همیشه قبل از استفاده از دادههای $_GET، وجود کلید را بررسی کنید.
<?php
if (isset($_GET["name"])) {
echo htmlspecialchars($_GET["name"]);
}
?>
مطالعه تکمیلی: تابع
htmlspecialcharsکاراکترهای خطرناک HTML را تبدیل میکند و از حملات XSS جلوگیری میکند. استفاده از آن برای نمایش دادههای کاربر در صفحه ضروری است.
۹-۳. آرایه $_POST
دادههای فرمهایی را نگه میدارد که با روش POST ارسال شدهاند. برای مثال، فرم زیر:
<form method="post" action="result.php">
<input type="text" name="username">
<input type="submit" value="ارسال">
</form>
در فایل result.php:
<?php
if (isset($_POST["username"])) {
echo "نام کاربر: " . htmlspecialchars($_POST["username"]);
}
?>
نکته: دادههای $_POST در آدرس مرورگر نمایش داده نمیشوند و برای ارسال اطلاعات حساس مناسبترند.
۹-۴. آرایه $_REQUEST
ترکیبی از $_GET، $_POST و $_COOKIE است. استفاده از آن توصیه نمیشود، زیرا مشخص نیست داده از کدام منبع آمده است.
<?php
if (isset($_REQUEST["name"])) {
echo htmlspecialchars($_REQUEST["name"]);
}
?>
مطالعه تکمیلی: به دلایل امنیتی و شفافیت کد، بهتر است بهجای
$_REQUESTاز$_GETیا$_POSTبهطور مشخص استفاده شود.
۹-۵. آرایه $_SERVER
اطلاعات مربوط به سرور و درخواست را نگه میدارد. چند کلید پرکاربرد:
<?php
echo $_SERVER["SERVER_NAME"]; // نام سرور
echo $_SERVER["REQUEST_METHOD"]; // روش درخواست (GET یا POST)
echo $_SERVER["PHP_SELF"]; // مسیر فایل جاری
echo $_SERVER["REMOTE_ADDR"]; // آیپی کاربر
?>
نکته امنیتی: استفاده از $_SERVER["PHP_SELF"] در فرمها بدون پاکسازی میتواند خطرناک باشد. بهتر است از یک رشته ثابت یا htmlspecialchars استفاده شود.
۹-۶. آرایه $_SESSION
برای نگهداری اطلاعات در بین درخواستهای مختلف استفاده میشود. برای شروع نشست، باید session_start() فراخوانی شود.
<?php
session_start();
$_SESSION["username"] = "علی";
$_SESSION["role"] = "admin";
?>
در صفحه دیگر:
<?php
session_start();
if (isset($_SESSION["username"])) {
echo "خوش آمدید " . $_SESSION["username"];
} else {
echo "لطفاً وارد شوید.";
}
?>
حذف یک مقدار از نشست
<?php
unset($_SESSION["role"]);
?>
پایان دادن به نشست
<?php
session_destroy();
?>
مطالعه تکمیلی:
$_SESSIONیک آرایه انجمنی است که PHP آن را مدیریت میکند. دادههای نشست در سرور ذخیره میشوند و شناسه نشست از طریق کوکی به مرورگر فرستاده میشود. برای امنیت بیشتر، پس از ورود کاربر موفق، شناسه نشست را باsession_regenerate_idتغییر دهید.
۹-۷. آرایه $_COOKIE
دادههایی را نگه میدارد که در مرورگر کاربر ذخیره شدهاند.
تنظیم کوکی
<?php
setcookie("username", "علی", time() + 3600);
?>
خواندن کوکی
<?php
if (isset($_COOKIE["username"])) {
echo "کاربر: " . htmlspecialchars($_COOKIE["username"]);
}
?>
نکته: کوکیها در مرورگر ذخیره میشوند و کاربر میتواند آنها را تغییر دهد. بنابراین نباید اطلاعات حساس در آنها ذخیره شود.
۹-۸. آرایه $_FILES
اطلاعات فایلهای آپلودشده را نگه میدارد. ساختار آن دوبعدی است.
<?php
if (isset($_FILES["myfile"])) {
echo "نام فایل: " . $_FILES["myfile"]["name"] . "<br>";
echo "نوع فایل: " . $_FILES["myfile"]["type"] . "<br>";
echo "اندازه فایل: " . $_FILES["myfile"]["size"] . "<br>";
echo "مسیر موقت: " . $_FILES["myfile"]["tmp_name"] . "<br>";
echo "کد خطا: " . $_FILES["myfile"]["error"] . "<br>";
}
?>
مطالعه تکمیلی: آپلود فایل نیاز به تنظیمات امنیتی دقیق دارد؛ مانند بررسی نوع فایل، اندازه فایل و استفاده از
move_uploaded_fileبرای انتقال فایل از مسیر موقت به مسیر نهایی. این موضوع در جزوههای جداگانه بررسی میشود.
۹-۹. کاربرد عملی: نمایش لیست کاربران
<?php
$users = [
["id" => 1, "name" => "علی", "age" => 17],
["id" => 2, "name" => "رضا", "age" => 20],
["id" => 3, "name" => "مریم", "age" => 16]
];
echo "<table border='1'>";
echo "<tr><th>شناسه</th><th>نام</th><th>سن</th></tr>";
foreach ($users as $user) {
echo "<tr>";
echo "<td>" . $user["id"] . "</td>";
echo "<td>" . $user["name"] . "</td>";
echo "<td>" . $user["age"] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
۹-۱۰. کاربرد عملی: فیلتر کردن لیست کالاها
<?php
$products = [
["name" => "کیبورد", "price" => 450000],
["name" => "ماوس", "price" => 250000],
["name" => "مانیتور", "price" => 3500000]
];
$maxPrice = 500000;
$cheap = array_filter($products, function ($product) use ($maxPrice) {
return $product["price"] <= $maxPrice;
});
foreach ($cheap as $product) {
echo $product["name"] . " : " . $product["price"] . "<br>";
}
?>
نکته: برای استفاده از متغیر بیرونی در تابع بازخوانی، از use استفاده میکنیم.
۹-۱۱. کاربرد عملی: محاسبه جمع سبد خرید
<?php
$cart = [
["name" => "کیبورد", "price" => 450000, "qty" => 2],
["name" => "ماوس", "price" => 250000, "qty" => 1]
];
$total = 0;
foreach ($cart as $item) {
$total += $item["price"] * $item["qty"];
}
echo "جمع کل: " . $total . " تومان";
?>
۹-۱۲. کاربرد عملی: گروهبندی دادهها
<?php
$students = [
["name" => "علی", "field" => "کامپیوتر"],
["name" => "رضا", "field" => "حسابداری"],
["name" => "مریم", "field" => "کامپیوتر"]
];
$grouped = [];
foreach ($students as $student) {
$grouped[$student["field"]][] = $student["name"];
}
print_r($grouped);
?>
خروجی:
Array
(
[کامپیوتر] => Array
(
[0] => علی
[1] => مریم
)
[حسابداری] => Array
(
[0] => رضا
)
)
مطالعه تکمیلی: این الگو (ساخت آرایه انجمنی با کلید دستهبندی و مقدار آرایهای) در گزارشگیری و پردازش داده بسیار رایج است. در PHP 7 به بعد میتوان از
array_reduceنیز برای این کار استفاده کرد، اما حلقهforeachخواناتر است.
۹-۱۳. نکات امنیتی مهم
- همیشه قبل از استفاده از کلیدهای آرایههای فوقسراسری، وجود آنها را با
issetبررسی کنید. - دادههای کاربر را با
htmlspecialcharsپاکسازی کنید. - از
$_REQUESTپرهیز کنید و منبع داده را مشخص کنید. - اطلاعات حساس را در کوکی ذخیره نکنید.
- برای دادههای ورودی، نوع و محدوده را اعتبارسنجی کنید.
- در استفاده از
$_FILES، نوع و اندازه فایل را کنترل کنید.
۹-۱۴. جمعبندی بخش نهم
- آرایههای فوقسراسری در همه بخشهای برنامه قابل دسترسی هستند.
$_GETو$_POSTبرای دریافت داده از فرمها استفاده میشوند.$_SESSIONبرای نگهداری اطلاعات در بین درخواستها کاربرد دارد.$_SERVERاطلاعات سرور و درخواست را نگه میدارد.$_FILESبرای آپلود فایل استفاده میشود.- همیشه دادههای ورودی را بررسی و پاکسازی کنید.
- آرایهها در ساخت جدول، فیلتر کردن، گروهبندی و محاسبات تجمعی کاربرد فراوان دارند.