ایجاد: ۱۲:۲۸ ۱۳۹۱/۷/۵
ویرایش: ۱۸:۵۳ ۱۳۹۳/۱/۱۱
»
تجزیه آدرس صفحه فعلی یا هر آدرس دیگر
در زبان پی اچ پی تابع کامل parse_url وجود دارد که تکتک عناصر یک url را تجزیه و قابل دسترس میکند:
<?php
$url = 'https://www.example.com/path/test?A=B#C';
var_dump(parse_url($url));
خروجی کد بالا، اینگونه است:
array(5) {
[scheme] => https
[host"]=> www.example.com
[path]=> /path/test
[query]=> A=B
[fragment] => C
}
خب همانطور که از کد بالا مشخص است، تابع parse_url برای تجزیه یک آدرس است. اما آدرس صفحه فعلی را چگونه میتوان تشخیص داد؟
در آرایه
$_SERVER
نیز بخشهای مختلف آدرس صفحه فعلی گنجانده شده است:
$_SERVER['SERVER_NAME'] نام دامنه
$_SERVER['REQUEST_URI'] عبارت پس از نام دامنه
نکته 1: دقت کنید که هش (#) و آنچه بعد از آن است، همراه request به سرور ارسال نمیشود مگر آنکه از طریق جاوا اسکریپت عبارت پس از هش خوانده شده و به عنوان یک پارامتر مجزا به صفحه فعلی شما ارسال شود.
نکته 2: دقت کنید که برخی موارد موجود در آرایه $_SERVER
شبیه هم است اما برخی از آنها بهتر از دیگری است. این مطلب را ببینید.
مثلا $_SERVER['SERVER_NAME']
اگر درست تنظیم شده باشد، بهتر از $_SERVER['HTTP_HOST']
است چون اولی پاک و مطمئن است اما دومی هم ممکن است غلط باشد و هم آلوده به کدی برای injection و ... که برای توضیح بیشتر میتوانید این مطلب یا این پاسخ را مطالعه کنید.
نکته 3: همچنین موارد جالب دیگری در آرایه $_SERVER
وجود دارد از جمله آدرس صفحه ارجاع (صفحه قبلی که کاربر از آن صفحه، به صفحه فعلی آمده است) که به صورت $_SERVER['HTTP_REFERER']
در دسترس است و کاربردهای فراوانی دارد. یکی از کاربردهای آن پیشگیری از حملات CSRF است و کاربرد دیگر آن، ارسال کاربر به صفحه پیشین، پس از ثبت اطلاعات فرم ارسالی است.
نکته 4: همانطور که در بحث امنیت به دانشجویان عزیز میگویم، نباید به عناصر موجود در آرایه $_SERVER
اعتماد کنید. مثلا تمام عناصری که به صورت
$_SERVER['HTTP_*****']
هستند، همگی باید آلوده فرض شوند چون توسط سرآیند request میآیند و در هنگام کار با دیتابیس یا چاپ آنها باید ابتدا اقدامات لازم را برای حفظ امنیت انجام داد.
دسترسی به پارامترهای ارسال شده نیز با آرایه $_GET
انجام میشود اما اگر پارامترهای ارسالی به صورت یک رشته وجود داشته باشد (سریالایز شده باشد)، آنگاه لازم است با کمک تابع parse_str
پارامترهای آن استخراج شود:
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first; // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
parse_str($str, $output);
echo $output['first']; // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
ترکیب عناصر یک آدرس برای ساخت یک آدرس
زمانی که عناصر و بخشهای یک آدرس را داشته باشیم، مثل هر رشته دیگری در php با کمک نقطه میتوان آن را ترکیب کرد. مثلا آدرس صفحه فعلی چنین میشود:
echo 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
اما یکی از نیازهای متداول برنامهنویسان، ترکیب پارامترهای ارسالی به صفحه فعلی، جهت ایجاد لینکهای صحیح در پاسخ است که با استفاده از تابع
http_build_query میتوان برای ترکیب عناصر استفاده کرد:
$data = array(
'foo'=>'bar',
'php'=>'hypertext processor');
echo http_build_query($data);
// foo=bar&php=hypertext+processor
در صورتی که آرایه ورودی به تابع http_build_query ایندکس عددی داشته باشد و ما بخواهیک که پیشوند خاصی به آن اضافه کنیم، میتوان از عناصر اختیاری دیگری که در لینک فوق اشاره شده، استفاده کرد. مثلا:
$data = array('boom', 'cow' => 'milk');
echo http_build_query($data, 'myvar_', '&');
// myvar_0=boom&cow=milk
همانطور که مشخص است، پارامتر اختیاری آخر کد فوق هم کاراکتر چسباننده عناصر آرایه را تعیین میکند.
یادداشتهای مرتبط
- سرویس های آنلاین رایگان برای نوشتن، تست و بهینه سازی کدهای برنامه نویسی
- لیست مواردی که برای امنیت برنامه PHP لازم است چک شود
- کاربردهای CURL در پی اچ پی
- تشخیص و کشف نوع، نام و مشخصات مرورگر کاربران سایت
- قلمرو متغیرها در پی اچ پی و جاوا اسکریپت
- دسترسی کامل به عناصر آدرس در جاوا اسکریپت
- ارسال و دریافت ایمیل با PHP و ساختن اکانت ایمیل
- نکاتی در مورد نسخه جدید PHP 5.5
- انواع راه های تولید کد QR با پی اچ پی و جاوا اسکریپت