کنترل هوشمند کش(Cache) در PHP

۵ سال پیش(به روز شده در ۵ سال پیش) پی اچ پی(PHP)(کد) ۰

برای کنترل هوشمند کش در php کد زیر را پیشنهاد می کنیم. روش کار این کد بدینصورت است که ابتدا چک می کند که آیا فایل تغییر یافته یا نه ، در صورت تغییر نیافته بودن فایل برای مروگر هدر 304 را ارسال میکند که بدین معناست صفحه تغییر نیافته و مرورگر محتوای کش را نمایش بدهد. این کنترل برای صفحات ایستاتیک همچون صفحات HTML ، CSS ، JS مناسب است. توجه کنید این کد برای صفحات دارای تگ php مناسب نیست چرا که محتوای فایل شاید تغییر نیافته باشد اما خروجی های متفاوتی ممکن است نمایش داده شود.

<?php
//گرفتن آخرین تاریخ تغییر فایل جاری
$lastModified=filemtime(__FILE__);
//گرفتن هش واحد از فایل برای etag
$etagFile = md5_file(__FILE__);
//گرفتن متد HTTP_IF_MODIFIED_SINCE header اگر تنظیم شده است
$ifModifiedSince=(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);
//گرفتن HTTP_IF_NONE_MATCH header در صورت تنظیم (etag: هش یکتا فایل)
$etagHeader=(isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : false);
 
//تنظیم آخرین تاریخ تغییر فایل
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $lastModified)." GMT");
//تنظیم etag-header
header("Etag: $etagFile");
//کش فایل
header('Cache-Control: public');
 
//بررسی اینکه آیا فایل تغییر یافته است یا نه. در صورت تغییر نیافتن هدر 304 ارسال می شود
if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])==$lastModified || $etagHeader == $etagFile)
{
       header("HTTP/1.1 304 Not Modified");
       exit;
}
 
//ادامه محتویات فایل جاری
echo "This page was last modified: ".date("d.m.Y H:i:s",time());
?>

منبع

برچسبها

Cache

صفحات پیشنهادی

گرفتن متن بین تگهای HTML...

با استفاده از کد زیر می توانید متن بین یک تگ خاص را بگیرید: $str = 'this is a <strong>text</strong>.<a>hello</a> world...'; $tagname = 'a'; preg_match("/<$tagname>(....

بهترین حالت برای از بین بردن اطلاعات ذخیره شده در سشن و خروج از سیستم - PHP...

بهترین حالت برای از بین بردن اطلاعات ذخیره شده در سشن و خروج از سیستم کد زیر می باشد که به پیشنهاد خود برنامه کمک زبان php می باشد......

سیستم لاگین فقط با استفاده از کوکی(PHP Script that uses Cookie for login)...

با استفاده از کد زیر که به همراه کدهای HTML قرار داده شده به راحتی می توانید بدون استفاده از نشستها یا سشن سیستم ورود به سیستم ایجاد نمایید......

گرفتن محتوای یک آدرس اینترنتی در PHP...

گاهی لازم است محتوای یک صفحه وب را بگیریم. در PHP توابع بسیاری برای این منظور وجود دارد اما تابع stream_get_contents بر اساس تجربه ما سرعت بیشتری دارد. مزیت این تابع کنترل دریافت مقدار بر اساس با...

نظر

نظری ثبت نشده است.
captcha image reload