استفاده از سیستم کش در php (بخش دوم)

خوب در بخش اول توضیحاتی در مورد استفاده از سیستم کش در سیستم مدیریت محتوا خوندین و در این بخش وارد قسمت عملی کار میشیم و با کد ها و برنامه نویسی این سیستم آشنا می شیم.

اول از همه با کدی آشنا می شیم که اطلاعاتی رو که نیازمون هست و از دیتابیس استخراج می کنیم رو به صورت فایل متنی و با فرمت html ذخیره می کنه :

// شروع کش
ob_start();

// استخراج اطلاعاتی از دیتابیس
$query = mysql_query("select * from table ORDER BY id");
while ($row = mysql_fetch_array($query)) {
    echo $row['id'].' | '.$row['content']. '<br />';
}

// ذخیره سازی اطلاعات در یک متغییر
$buffer = ob_get_contents();

// پایان ذخیره اطلاعات در کش
ob_end_flush();

// اطلاعات ذخیره شده در متغیر در یک فایل ذخیره می شود
$fp = fopen($file, "w");
fwrite($fp, $buffer);
fclose($fp);

خوب کد نیاز به توضیح بیشتری نداره و توضیحاتش در کامنت ها هست.
و حالا به کدی می رسیم که وظیفه تشخیص وجود فایل کش رو بر عهده داره و در این تکه کد دو حالت پیش میاد :
۱- اگر فایل کش وجود داشت, محتوای ذخیره شده در آن فایل را نشان می دهد.
۲-اگر فایل کش وجود نداشت, کد مربوط به واکشی اطلاعات از دیتابیس و ذخیره آن در یک فایل را اجرا می نماید.

// آدرس فولدر برای ذخیره فایل های کش
$cacheDir = dirname(__FILE__) . '/cache/';
$file = $cacheDir . 'index.html';

// یک دستور شرطی که وجود فایل را تشخیص می دهد
if (file_exists($file))
{
	// خواندن محتوای فایل و نشان دادن آن در مرورگر
	 header("Content-Type: text/html");
	 readfile($file);
}

و کد نهایی که ترکیبی از هر دو کد می باشد :

// آدرس فولدر برای ذخیره فایل های کش
$cacheDir = dirname(__FILE__) . '/cache/';
$file = $cacheDir . 'index.html';

// یک دستور شرطی که وجود فایل را تشخیص می دهد
if (file_exists($file))
{
	// خواندن محتوای فایل و نشان دادن آن در مرورگر
	 header("Content-Type: text/html");
	 readfile($file);
}
else
{
	// شروع کش
	ob_start();

	// استخراج اطلاعاتی از دیتابیس
	$query = mysql_query("select * from table ORDER BY id");
	while ($row = mysql_fetch_array($query)) {
		echo $row['id'].' | '.$row['content']. '<br />';
	}

	// ذخیره سازی اطلاعات در یک متغییر
	$buffer = ob_get_contents();

	// پایان ذخیره اطلاعات در کش
	ob_end_flush();

	// اطلاعات ذخیره شده در متغیر در یک فایل ذخیره می شود
	$fp = fopen($file, "w");
	fwrite($fp, $buffer);
	fclose($fp);
}

شما می تونین با تغییر این قسمت از کد :


	$file = $cacheDir . 'index.html';

و عوض کردن “index.html” هر اسم دیگری به فایل کش خودتون بدین و حتی می تونین اون رو به صورت دینامیک نام گذاری کنین و چندین بار از این کد توی صفحه مورد نظر خودتون استفاده کنین.
امیدوارم که از این آموزش راضی باشید و از اون توی پروژه های خودتون استفاده کنید (:

سلام! من صمد ارشدی ادمین ققنوس گرافیک هستم, طراح و برنامه نویس وب و از همه مهمتر عاشق وردپرس. در ضمینه های HTML, Css, Js, jQuery, Php, Mysql و … تخصص دارم. برای ارسال سفارش طراحی و برنامه نویسی سایت می تونین با این ایمیل [email protected] تماس بگیرین.

گوگل پلاس

6 فکر می‌کنند “استفاده از سیستم کش در php (بخش دوم)

  1. پیام

    سلام
    ممنون از آموزش خوبتون
    فقط خواستم ادامه آموزش تون این رو اضافه کنم که این کد یه نمونه ساده از عمل کش هست و هنگام کش باید این حالت رو هم در نظر بگیرید که فایل مربوط به کش اگر هم زمان در حال خواندن و نوشتن باشه چه اتفاقی بیفته چون در این حالت ممکنه یه کاربر در حال خواندن اطلاعات باشه و واسه کاربر دیگه در حال نوشتن که این باعث میشه اطلاعات به صورت ناقص نمایش داده بشه .
    همچنین می تونید فقط یه بخش از سابت رو کش کنید نه تمام خروجی سایت رو .

    موفق باشید

    پاسخ
  2. admin نویسنده

    سلام
    مرسی

    اول یه نکته ای رو بگم که این آموزش بیس کلی کار رو توضیح داده و شما اول باید ببینید که اصلا استفاده از این روش توی سیستم شما باعث بهینه شدن و افزایش سرعت میشه یا نه.

    ۱- جواب این سوال خیلی سادس, شما وقتی اطلاعات db رو آپدیت کردین باید همزمان فایل کش مربوطه رو پاک کنید بعد خود کد چک میکنه, اگه فایل کش نبود دوباره از db می خونه و برای دفعات بعد دوباره کش میکنه.

    ۲- اصلا این روش برای داده های حجیم خوبه و بعد هم اینکه نمیشه عین این کد رو تو سیستمتون کپی کنید, شما اول باید این روش رو با توجه به سیستم خودتون, کاستومایز کنین.

    پاسخ
  3. رامین

    سلام
    بابت مطلب دستتون درد نکنه
    ولی من چند سوال داشتم
    ۱ – اول بحث اینه که در چه صورتی نتایج جدید رو نسبت به نتایج قبلی تشخیص
    میده که آیا باید از فایل خوند یا از دیتابیس
    ۲ – اگر این مورد حل بشه ایا برای داده های جچیم خوندن و یا درست کردن فایل مناسبه با توجه با اینکه خواندن از فایل به صورت ترتیبی انجام میشه!

    پاسخ
  4. hasan

    ممنون از آموزشتون
    من این سیستم رو روی سایتی که داشتم طراحی میکردم پیاده سازی کردم سرعتش فوق العاده زیاد شد.

    پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Time limit is exhausted. Please reload CAPTCHA.