المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : تحليل وبرمجة نظام كاش مبسط ، وبناء كلاس لهذا الغرض،



loulou ange
11-01-2013, بتوقيت غرينيتش 03:44 PM
http://www.dzbatna.com/images/icons/idea.gif طھط*ظ„ظٹظ„ ظˆط¨ط±ظ…ط¬ط© ظ†ط¸ط§ظ… ظƒط§ط´ ظ…ط¨ط³ط· طŒ ظˆط¨ظ†ط§ط، ظƒظ„ط§ط³ ظ„ظ‡ط°ط§ ط§ظ„ط؛ط±ط¶طŒ (http://www.dzbatna.com/t1576477/)



بسم الله الرحمان الرحيم ،


السلام عليكم ورحمة الله تعالى وبركاته



عنوان الدرس مفصل : تبسيط وبرمجة وتحليل فكرة الكاش للبيانات




تعريف الكاش :

اقتباس
… كلمة سمعها الكثيرين … منهم المحترفون ومنهم المبتدئون
جميعنا يعلم بان الصفحات الديناميكية قد تستغرق وقت اكثر من الصفحات العادية لكي تحمل للمتصفح وتظهر كاملة , الأمر الذي يجبر المتصفح على الانتظار … ولكن صبره سرعان ما سينفذ ويخرج حانقا من الموقع ما لم تظهر الصفحة خلال ثواني معدودة … ما الحل اذن ؟؟
اليوم اصبح يكمن التحدي الحقيقي في هذا المجال بكيفية جعل البرنامج او السكربت الذي قمنا ببنائه يعالج بنفس السرعة التي يعالج بهذا المحتوى الغير ديناميكي واعتقد بان الغرب قد قطع شوطا كبيرا في هذه النقطة ونحن العرب كالعادة … تصلنا آخر صيحات البرمجة بعد وقت لا بأس فيه من انطلاقها والسبب واضح وهو كتمان العلم , فترى المبرمج العربي قد تعرف على تقنية جديدة وثورية في مجال برمجي معين عندها يقوم ببناء برنامج معين او سكربت … ويقوم بتشفير اكواده ويبدأ ببيعها واذا طلب احدهم معلومة عن المحتوى او الطريقة فان الويل سيكون من نصيب الاخير .


من هذا نفهم انا الكاش جاء ليحل هذه المشكلة ،لسرعة في اظهار البيانات ولفعالية اكثر،


تحليل الكلاس :


في البداية،

سوف نحدد متغير مسار مجلد الكاش ، وهذا لازمه تصريح 777 ، لانه سوف نكتب عليه ملفات الكاش ،
ثم متغير امتداد ملفات الكاش وهذا ثانوي ـ تقدر تستغني عنه ،لكن في بعض البرمجيات اذا كانت تريد تفصل بين انواع من الملفات حسب العمل ، تغير الامتداد ، يعني مسالة تنظيمية فققط ،
على بركة الله نبدا
بسم الله ،

رمز PHP:

<code style="white-space:nowrap"> <code> <?
class cach_dzbatna_system
{
public $cach_dir_name;
public $extension;
}
?> </code> </code>


بعدما انشأنا الكلاس ،
الحين سوف نقوم بانشاء دالة كتابة ملفات الكاش وليكن اسمها ، export
هذه الدالة سوف تحمل 3 بارامترات ،
$name,
$content
$time=3600
المتغير الاول ،هو اسم الملف ،
$content ، محتوى البينات المراد عمل الكاش لها ،
$time ، فترة الاغراق ـ، او فترة بقاء الكاش ، وجلعنا القيمة الافتراضية ساعة ،

نظرة على محتوى ملف الكاش ، مثال ،

رمز PHP:

<code style="white-space:nowrap"> <code> <?php


//FILE CACH GENERATED AUTOMATICALLY By Traidnt system cach 31-05-2014 12:21:09 PM

(!defined("SECURITY") ? exit("FILE NOT FOUND 404") : null);

if(time() > 1275308479) return false;

$content = 's:11:"the_the_the";';

?> </code> </code>



هذا الملف فوق ،هو ملف تم توليده اوتوماتيكيا بدالة توليد ملفات الكاش ،
في البداية عملنا حماية من الولوج المباشر الى الملف ـ
ثم بعد ذلك حددنا طريقة مقارنة التوقيت الحالي ، وتوقيت التوليد + فترة البقاء ، اذا لم يتحقق الشرط سوف يرجع قيمة false
ثم بعد ذلك متغير اسمه content ، هذا هو المتغير الذي سوف يحمل البيانات المراد عمل الكاش لها ، وهو الذي سوف نستدعيه بعد ذلك ، وتم تمرير البيانات قبل اضافتها للملف بر دالة serialize ودالة var_export ، وذلك لتفادي ضياع اية بيانات من المتغير الذي تم تمريره ،
وبعد ذلك سوف نعمل كتابة للملف الجديد ،على المجلد الذي تم اختياره ،
وفي الاتي الدالة كاملة ،


رمز PHP:

<code style="white-space:nowrap"> <code> <? function export($name,$content,$time=3600)
{

$new_content = '<?php'."\n\n\n";
$new_content .= '//FILE CACH GENERATED AUTOMATICALLY By Traidnt system cach ' . gmdate('d-m-Y h:i:s A ') . "\n\n";
$new_content .= '(!defined("SECURITY") ? exit("FILE NOT FOUND 404") : null);' . "\n\n";
$new_content .='if(time() > ' . (time() + $time) . ') return false;' . "\n\n";
$new_content .= '$content = ' . var_export(serialize($content),true) . ";\n";
$new_content .= "\n".'?>';



$file = $this->cach_dir_name. '/' . md5($name) . '.'.$this->extension;
if($ad = @fopen($file, 'w'))
{
@flock($ad, LOCK_EX);
@fwrite($ad, $new_content);
@flock($new_content, LOCK_UN);
@fclose($new_content);
}
?> } </code> </code>



بعد ان انتهينا من دالة الكتابة ،
نمر الان الى دالة الجلب والاستدعاء ،
وهي بسيطة ،
سوف تشتمل على متغير واحد ، وهو اسم الملف ،
ثم بعد ذلك سوف نتاكد من وجود الملف على مجلد الكاش ، قبل التضمين ، ان ثبت انه موجود ، فسوف نعمل انكلود للملف ، ثم تمرير المتغير $content على دالة unserialize عمل return له ـ،
وهذه هي الدالة ،


رمز PHP:

<code style="white-space:nowrap"> <code> <? function get_the_file($name)
{
$file = ($this->cach_dir_name).'/' . md5($name) . '.'.$this->extension;
if (file_exists($file))
{
include_once ($this->cach_dir_name.'/' . md5($name) . '.'.$this->extension);
if(!empty($content))
{
return unserialize($content);
}
else
{
return false;
}
}
else
{
return false;
}
} ?> </code> </code>

وهذا هو الناتج الكلي ، مع مثال لذلك ،


رمز PHP:

<code style="white-space:nowrap"> <code> <?

class cach_dzbatna_system
{

public $cach_dir_name;
public $extension;


function get_the_file($name)
{
$file = ($this->cach_dir_name).'/' . md5($name) . '.'.$this->extension;
if (file_exists($file))
{
include_once ($this->cach_dir_name.'/' . md5($name) . '.'.$this->extension);
if(!empty($content))
{
return unserialize($content);
}
else
{
return false;
}
}
else
{
return false;
}
}





function export($name,$content,$time=3600)
{

$new_content = '<?php'."\n\n\n";
$new_content .= '//FILE CACH GENERATED AUTOMATICALLY By Traidnt system cach ' . gmdate('d-m-Y h:i:s A ') . "\n\n";
$new_content .= '(!defined("SECURITY") ? exit("FILE NOT FOUND 404") : null);' . "\n\n";
$new_content .='if(time() > ' . (time() + $time) . ') return false;' . "\n\n";
$new_content .= '$content = ' . var_export(serialize($content),true) . ";\n";
$new_content .= "\n".'?>';



$file = $this->cach_dir_name. '/' . md5($name) . '.'.$this->extension;
if($ad = @fopen($file, 'w'))
{
@flock($ad, LOCK_EX);
@fwrite($ad, $new_content);
@flock($new_content, LOCK_UN);
@fclose($new_content);
}
}
}

$cach = new cach_dzbatna_system;
$cach->cach_dir_name = 'cache_dir';
$cach->extension = 'php';
define('SECURITY','Allow');
if(!($txt = $cach->get_the_file('jawad'))){

$cach->export('jawad','the_the_the');
}
else {
echo $txt;
}

?> </code> </code>

ان شاء الله يكون درس مفصل اليوم نال اعجببكم رغم بساطته ، سوف يكون دخولي بعد هذا الدرس مفصل متقطع ، نظرا للامتحانات ، ادعو لي بالتوفيق ولكل الامة الاسلامية ،
سلامي JawadSoft






ألعاب الأندرويد مجانا و حصريا (http://www.apotox.info/forum)




https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى