نماد سایت تیک۴

مدیریت HTTP در PHP

در این آموزش موارد زیر را برسی خواهیم کرد:

تابع ( ) header :
تابع ( ) header ، یک دستور HTTP را به مرورگر کاربر ( client ) ارسال می کند .
از دستورات HTTP برای ارسال کدهایی که می خواهید قبل از هرگونه پردازش یا تولید خروجی صفحه ، توسط وب سرور اجرا شوند ، استفاده می شود .
بنابراین تابع ( ) header ، بایستی قبل از هر گونه کد یا دستور در صفحه ، حتی قبل از تگ HTML تعریف شوند . برای مثال کد زیر ، صفحه را دچار مشکل می کند . چرا که بعد از تگ <html> وارد شده است :

کد نا صحیح:

<html>
<?php
// این کد باعث بروز خطا در صفحه می شود 
// قرار دارد html چون بعد از تگ 
header('Location:https://www.tik4.com/'); 
?> 
</html>

شکل کلی استفاده از این تابع به صورت زیر است :

syntax header( string , replace , http_response_code );

string: این پارامتر دستور یا عبارت HTTP را برای تابع ( ) header تعیین می کند .
استفاده از این پارامتر اجباری است .
replace: این پارامتر تعیین می کند که آیا دستور HTTP ارسالی باید جایگزین دستور مشابه قبلی خود شود یا اینکه دستور دومی را به صفحه اضافه نماید . مقدار پیش فرض این پارامتر TRUE است و باعث می شود تا دستور HTTP جدید ، جایگزین دستور HTTP قبلی مشابه خود شود .
استفاده از این پارامتر اختیاری است .
http_response_code: این پارامتر یک مقدار اجباری را برای پاسخ دستور HTTP تعیین می کند .
تا آنجایی که ما بررسی کردیم ، این پارامتر کاربرد چندانی ندارد !
استفاده از این پارامتر اختیاری است .
مثال های عملی :
در این بخش با ارائه چند مثال عملی ، نحوه استفاده و کاربرد تابع ( ) header را در PHP آموزش داده ایم .
مثال ۱: به طور معمول مرورگرها اطلاعات صفحاتی که اجرا می کنند را در حافظه ذخیره ( cache ) می کنند . در مثال زیر به وسیله تابع ( ) header ، یک دستور HTTP را به مرورگر ارسال کرده ایم ، تا از ذخیره اطلاعات صفحه جاری در حافظه خودداری نماید :

<?php 
// تاریخ مراجعه قبلی
header("Expires: Mon, 26 Jul 2012 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
?> 
<html>
<body>

مثال ۲ : در مثال زیر ، توسط یک دستور HTTP به مرورگر اعلام کرده ایم تا در هنگام لود صفحه پنجره دانلودی را به کاربر نمایش داده و در صورت تمایل وی ، یک فایل PDF را ذخیره نماید :

 <?php 
header("Content-type:application/pdf");

// این دستور باعث نمایش کادر دانلود می شود
header("Content-Disposition:attachment;filename='downloaded.pdf'");

// نام فایل را تعیین می کند
readfile("original.pdf");
?> 
<html>
<body>

تابع ( ) setcookie :

تابع ( ) setcookie ، یک کوکی را به وسیله یک دستور HTTP به مرورگر کاربر ( client ) ارسال می کند .
همانطور که می دانید کوکی یک متغیر است که برای نگهداری اطلاعات کاربر بر روی کامپیوتر وی استفاده می شود . هر بار که کاربر ، با همان مرورگر صفحه یا سایت مورد بحث را باز کند ، مقدار این کوکی فراخوانی شده و به صفحه ارجاع می شود . برای مثال رمز عبور یا نام کاربری در یک سایت از جمله کوکی های پر استفاده است .
برای دریافت اطلاعات بیشتر راجع به کوکی ها و نحوه تعریف و استفاده از آنها ، به بخش تعریف و استفاده از کوکی ها در PHP بروید .
نام کوکی به صورت اتوماتیک به متغیری به همان نام در صفحه اختصاص می یابد . برای مثال اگر کوکی به نام ” user ” در صفحه ایجاد شود ، در هنگام اجرای صفحه متغیری به نام ” user ” ساخته شده و با مقدار کوکی ، مقدار دهی خواهد شد .
برای استفاده موثر از یک کوکی ، بایستی مقدار آن قبل از ایجاد صفحه ، به صفحه ارسال شود . بنابراین می توان از تابع ( ) setcookie که یک دستور HTTP است ، برای این کار استفاده نمود.
شکل کلی استفاده از این تابع به صورت زیر است :

syntax setcookie( name , value , expire , path , domain ,secure );

 

name: پارامتر name تعیین کننده نام کوکی است . از این نام برای بازیابی و فراخوانی کوکی در سطح برنامه استفاده می شود.
value: پارامتر value مقدار کوکی را تعیین می کند .این مقدار بر روی کامپیوتر ذخیره می شود .
expire: پارامتر expire تعیین کننده مدت زمان اعتبار کوکی ، بر حسب ثانیه است . پس از اتمام این مدت زمان ، کوکی از بین خواهد رفت .
برای تعیین مدت زمان اعتبار کوکی ، معمولا از تابع ( ) time استفاده می شود.
domain: پارامتر domain ، دامنه ای که کوکی بر روی آن قابل دسترس است را تعیین می کند.
برای مثال اگر مقدار آن ‘www.Tik4.com’ تنظیم شود ، فقط در این دامنه قابل دسترسی است.
تعیین این پارامتر اختیاری است.
secure: این پارامتر تعیین میکند که آیا کوکی فقط بایستی از طریق یک پروتکل امن HTTPS منتقل شود با خیر.
مقدار پیش فرض این خاصیت FALSE بوده و تعیین آن نیز اختیاری است.
نکته: برای خواندن مقدار یک کوکی از تابع ( نام کوکی ) COOKIE_$ استفاده می شود .

مثال های عملی :
در مثال های زیر ، به صورت عملی نحوه استفاده از تابع ( ) setcookie را آموزش داده ایم .
مثال ۱: در مثال اول ، نحوه تعریف یک کوکی را به صورت ساده نشان داده ایم :

<?php 
$value = "my cookie value";
// تعریف و ارسال یک کوکی ساده
setcookie("TestCookie",$value);
? > 
<html>
<body>

 

مثال ۲: تعریف یک کوکی که پس از یک روز از بین می رود :

<?php 
$value = "my cookie value";
// تعریف و ارسال یک کوکی ساده با اعتبار ۲۴ ساعت
setcookie("TestCookie",$value, time()+3600*24);
? > 
<html>
<body>

 

مثال ۳ : در مثال زیر مقدار کوکی که قبلا ایجاد کرده ایم را به روش های مختلفی در خروجی نمایش داده ایم :

<?php 
// چاپ مقدار کوکی در خروجی
echo $_COOKIE["TestCookie"];
echo "<br />";
echo $HTTP_COOKIE_VARS["TestCookie"];
echo "<br />";

// چاپ تمام کوکی های صفحه
print_r($_COOKIE);
? > 
<html>
<body>

خروجی:
my cookie value
my cookie value
Array ([TestCookie] => my cookie value)
مرجع توابع کار با HTTP در PHP :

توابع HTTP در PHP این امکان را به شما می دهند تا اطلاعات ارسالی به مرورگر توسط وب سرور را قبل از اینکه هر گونه خروجی تولید شود ، دستکاری نمایید .
برای مثال ، مرور گرها اطلاعات صفحات وبی که نمایش می دهند را در حافظه ذخیره یا به عبارت دیگر Cache می کنند . بوسیله یک تابع مدیریت HTTP می توانید دستوری به مرورگر ارسال نمایید تا قبل از هر گونه کاری برای پردازش و تولید خروجی صفحه ، از Cache اطلاعات آن صفحه خودداری نماید .
اکثر دستورات توابع مدیریت HTTP بایستی در ابتدای صفحات وب و حتی قبل از تگ <html> قرار می گیرند .

شرح عملکرد:
header ( ) به وسیله این تابع می توان یک دستور HTTP را به مرورگر ( client ) ارسال کرد .
header_list ( ) این تابع لیستی از دستورات HTTP که به مرورگر ارسال شده یا آماده هستند ، که ارسال شود را به صورت یک آرایه بر می گرداند .
header_sent ( ) این تابع چک می کند که آیا یک دستور HTTP خاص به مرورگر ( client ) ارسال شده یا خیر .
setcookie ( ) این دستور یک کوکی cookie را به مرورگر ( client ) ارسال می کند .
setrawcookie ( ) این دستور یک کوکی HTTP را بدون اینکه URL تاثیری بر مقدار آن داشته باشد را به مرورگر ( client ) ارسال می کند .
عملکرد این تابع دقیقا مشابه تابع ( ) setcookie است ، با این تفاوت که در آن کوکی ها encode نخواهند شد .

خروج از نسخه موبایل