نقطه ویرگول;

هر از گاهی از هر چیزی

هر از گاهی از هر چیزی

نهان سازی (Caching) در PHP
در این بخش،من به شما نشان خواهم داد چگونه اسکریپت های خود را با استفاده از نهانسازی که در زیر یک اسکریپت نمونه آورده شده است مقاوم سازی کنید.هدف این است که در همه حال سرعت درخواست فایلها که توسط کاربران داده میشود را بالا ببریم.تولید محتویات در همه زمان ها فقط یک کار بیهوده است،مخصوصا در داده های استاتیکی همانند سی اس اس هایمان.
برای نهانسازی ما نیاز داریم تا سه چیز را به اسکریپت هایمان اضافه کنیم.
یک،ما باید داده های ورودی به اسکریپتمان را جمع آوری کنیم و یک فایل یکتا از ورودی هایمان تولید کنیم.
دو،باید به فایل کش نگاه کنیم و ببینم به اندازه کافی جدید است.
سه، ما باید یا از کپی کش شده هایمان استفاده کنیم یا متحویات جدید را ایجاد و برای استفاده در دفعات بعد کش کنیم.

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

$fileDirectory = '';
$file = $_GET['q'];
$nameExplode = explode('.', $file);
$ext = $nameExplode[1];
$fileName = $fileDirectory . $file;
//-- WE HAVE ENOUGH DATA TO GENERATE A CACHE FILE NAME HERE --
if ($ext != 'css' AND $ext != 'htm' AND $ext != 'html') {
//Check for evil people...
die('Hackers...!');
} else {
//-- WE CAN INTERCEPT AND CHECH FOR THE CACHED VERSION HERE --
//Lets get down to business
$handle = fopen($fileName, 'r');ً
$fileData = fread($handle, filesize($fileName));
//Now for some regex wizardry!
$newData = preg_replace('/s+/', ' ', $fileData);
fclose($handle);
//Time to output the data.
//-- NOW WE CAN STORE THE NEW DATA IF REQUIRED AND OUTPUT THE DATA --
if ($ext == 'css') {
header("Content-type: text/css");
}
echo $newData;
}
?>
استفاده در عمل
حال ما در واقع کدی برای نهان سازی نوشتیم،من ابتدا اسکریپت کامل رو گذاشم،حال هر تکه از آنرا به صورت جداگانه توضیح میدهم

$fileDirectory = '';
$file = $_GET['q'];
$nameExplode = explode('.', $file);
$ext = $nameExplode[1];
$fileName = $fileDirectory . $file;
$cacheName = './cache/' . $nameExplode[0] . $nameExplode[1] . '.tmp';
if ($ext != 'css' AND $ext != 'htm' AND $ext != 'html') {
//Check for evil people...
print_r($ext);
die('Hackers...!');
} else {
if (file_exists($cacheName) AND filemtime($cacheName) > (time() - 86400)) {
$cacheHandle = fopen($cacheName, 'r');
$newData = fread($cacheHandle, filesize($cacheName));
fclose($cacheHandle);
$isCached = TRUE;
} else {
//Lets get down to business
$handle = fopen($fileName, 'r');
$fileData = fread($handle, filesize($fileName));
//Now for some regex wizardry!
$newData = preg_replace('/s+/', ' ', $fileData);
fclose($handle);
//Lets cache!
$cacheHandle = fopen($cacheName, 'w+');
fwrite($cacheHandle, $newData);
fclose($cacheHandle);
$isCached = FALSE;
}
//Time to output the data.
if ($ext == 'css') {
header("Content-type: text/css");
if ($isCached) {
echo "// Retrieved from cache file. n";
}
} else {
if ($isCached) {
echo '';
}
}
echo $newData;
}
?>
تشریح:
یکی از مزیت هایی که به این اسکریپت اضافه گردیده این است که کش هر 24 ساعت یک بار رفرش میشود.این برای هر نوع تغییری سودمند است.یا شما می توانید 24 ساعت صبر کنید یا اینکه دایرکتوری کش را خالی کنید.اگر شما فاصله زمانی متفاوتی برا رفرش میخواهید باید آنرا به ثانیه حساب کنید.
$cacheName = './cache/' . $nameExplode[0] . $nameExplode[1] . '.tmp';
این تکه از کد فقط نام فایل و پسوند آنرا به دست می آورد و آنرا به هم متصل و به دایرکتوری کش اضافه میکند و به آن یک پسوند .tmp اختصاص میدهد.
 if (file_exists($cacheName) AND filemtime($cacheName) > (time() - 86400)) {
$cacheHandle = fopen($cacheName, 'r');
$newData = fread($cacheHandle, filesize($cacheName));
fclose($cacheHandle);
$isCached = TRUE;
} else {
در اینجا چک میکنیم چنانچه فایل کش ذخیره شده داریم یا نه و آیا فایل کش شده، در 24 ساعت اخیر ساخته شده است،اگر هر دو شرط درست باشد سپس فایل را باز کرده و محتویات آنرا با خروجی اسکریپت جایگزین میکنیم.همچنین $isCached را true ست میکنیم با این کار می توانیم بعضی از از پیام ها را در آخر خروجی دهیم.
 //Lets cache!
$cacheHandle = fopen($cacheName, 'w+');
fwrite($cacheHandle, $newData);
fclose($cacheHandle);
$isCache = FALSE;
}
حال ما خروجی اسکریپت را برای خودمان برای استفاده در درخواست های بعدی نهان سازی میکنیم.ما در واقعا فایل را در حالت نوشتن(write) باز میکنیم،یک رو نوشت از داده هایمان را در داخل آن میگذاریم و سپس آنرا می بندیم.اکیدا نباید فایل ها را در پی اچ پی close کنید،اما اینجا به نظرم بهتر دیدم که این کار رو انجام دهم.

آزمایش اسکریپت:
اگر از اسکریپتمان دوباره استفاده کنیم،هیچ تغییری تا رفرش دوباره ملاحظه نمیکنیم،تا وقتی که یک پیغام که میگوید که فایل از کش باز خوانده شده است.این تنظمیات کش فقط با کمی تغییر میتواند در اولین اسکریپت این مقاله به کار گرفته شود.به هر حال این یک تمرین خوبی برا خوانندگان مقاله بود ;)
نتیجه:
حال شما قادر هستید به سرعت یک کد ساده ولی موثر را به هر اسکریپتتان که برای آن زحمت میکشید، اضافه کنید.این فقط مقدار کمی به کدنویسی شما اضافه میکند اما مقدار زیادی بار از دوش سرورتان بر میدارد و سرعت بارگذاری سایتتان را افزایش میدهد.
حال با انجام این کار شما پیروز میدان خواهید بود ;)

نظرات  (۱)

۲۸ دی ۸۹ ، ۱۵:۴۶ خبر سوئد
راجع به smarty هم یک پست بنویسید , در ضمن قسمت دوم مقاله باز نشد...
تشکر

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی