صفحة 1 من 3 123 الأخيرةالأخيرة
النتائج 1 إلى 15 من 43

الموضوع: الكاش او الملفات المؤقتة بأسهل الطرق

  1. #1

    الكاش او الملفات المؤقتة بأسهل الطرق



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

    ###########
    لماذا الملفات المؤقتة

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

    ##############
    فوائد الملفات المؤقتة

    بكل صراحة ستجد فرق كبير بين الوضع السابق والأن
    بالطبع سيكون البرنامج سريع التصفح

    ###########
    الدوال التي سنحتاجها في الدرس وهي

    file_exists التأكد من الملف هل هو موجود
    filectime ارجاع وقت اخر تعديل
    ob_start بداية حفظ المخرجات
    ob_get_contents تعطينا المعلومات المسخرجة
    ob_clean تقوم بمسح المعلومات التي تم حفظها في الذاكرة
    opendir مقبض المجلد
    readdir قارئ المجلد
    unlink مسح الملفات
    fopen مقبض الملفات
    fwrite الكتابة على الملفات

    ##########
    فكرة الدرس

    سأشرح الفكرة نظريا لكي يسهل عليك عزيزي القارئ ان تفهم الشفرة

    اولا
    عندما نضيف بيانات الى القاعدة مثلا
    سنقوم بمسح الملفات المؤقتة الموجودة من قبل لانه من غير المعقول ان تكون القاعدة
    تم اضافة اليها مقال جديد وانت تعرض للناس شيء قديم

    ثانيا

    نضع وقت للملف المؤقت حتى يتم تحديثه بعد كل ساعة
    ستقول لي بما اننا نمسح الملفات المؤقتة لحظة اضافة جديد
    اذا ماذا نستفيد اذا تركنا الملف لمدة ساعة حتى يتم تحديثه

    الجواب بسيط
    لنفرض انك قمت بمسح او اضافة شيء من خلال لوحة التحكم الخاصة ب phpmyadmin
    اذا على الأقل بعد اقل من ساعة سيتم اظهار الجديد

    ثالثا
    نقوم بحفظ الملف المؤقت بنفس الرقم الموجود في القاعدة او نفس رقم الصفحة

    مثال بسيط
    عندما يكون لدينا صفحة لاستخراج مقال واحد مثل
    news.php?id=28
    سيكون الملف المؤت هكذا
    news-28.html
    داخل مجلد الكاش او الملفات المؤقتة

    #########
    هيكلية البرنامج الذي سنستخدم عليه نظام الملفات المؤقتة
    config.php
    index.php
    news.php
    moderator.php
    caches/
    ملف config.php
    كود PHP:
    <?php
    $dbserver
    ="localhost";
    $dbuser="root";
    $dbpass="";
    $dbname="news";
    @
    mysql_connect($dbserver,$dbuser,$dbpass) or die ( mysql_error() );
    @
    mysql_select_db($dbname) or die ( mysql_error() );
    $cache="caches/"//المجلد الذي سيتم تخزين الملفات المؤقتة
    $exp=3600//فترة بقلت الكاش هو ساعة
    ?>
    ملف index.php
    كود PHP:
    <?php
    // سأقوم بتغير الوجهة بسرعة الى ملف العرض طبعا هذه الملفات للتجربة فقط
    header("location: news.php");
    ?>
    #########
    عندما نضيف بيانات الى القاعدة

    سنستخدم ملف moderator.php
    كود PHP:
    <?php
    // في الواقع يجب حماية ملفات التحكم بكلة المرور وانا لم احمي الملف لاني فقط اشرح طريقة الكاش
    include('config.php'); // تضمين ملف الاتصال بالقاعدة
    // سيكون لدين جدول اسمه مثلا news
    // وحقلين id و text
    // اذا تمارسال شيئ ما عن طريق نموذج الارسال
    if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
        
    $news=$_POST['news']; // متغير يحمل الخبر اضا لم اقم بحماية المتغير يجب عليك حمايته
        
    $send=mysql_query(" insert into news (text) values ('$news') ");
        if( 
    $send ) {
            echo 
    "تم الارسال بنجاح";
            
    // هنا سيتم مسح المفات المؤقتة
            
    if( $open=opendir($cache) ){
                
    $cnt=0// متغير يحمل قيمة عددية
                
    while( false !== $files=readdir($open) ){
                    if( 
    $files != '.' && $files != '..' ){
                        
    //اذا تما مسح ملف او ملفات ستم احتساب عدد المرات
                        
    if( unlink($files) ){
                            
    $cnt++; // حفظ عدد مرات المسح
                        
    }
                    }
                }
            }
            if( 
    $cnt ){
                echo 
    " تم مسح ".$cnt." ملف";
            }
        }else{
            echo 
    "لم يتم الارسال ";
        }
    }else{
        
    // هنا يكون نموذج الارسال اعتقد ان هذا مفهوم ومعروف
        // form
    }

    ?>
    الشفرة المسؤولة عن المسح يمكن جعلها دالة وتستخدمها في اي مكان بكل سهولة
    ############
    عندما استعرض المعلومات من القاعدة

    سنستخدم ملف news.php

    كود PHP:
    <?php
    // في الواقع يجب حماية ملفات التحكم بكلة المرور وانا لم احمي الملف لاني فقط اشرح طريقة الكاش
    ob_start(); // بداية تخزين المعلومات المتدفقة
    include('config.php'); // تضمين ملف الاتصال بالقاعدة
    $id=(!is_numeric($_GET['id'])? intval($_GET['id']));
    // اذا كان الملف موجود ووقت انشاء الملف + الوقت الاضافي اكبر من الوقت الأن يعني لا يزال الوقت الاضافي لم ينتهي بعد
    // الوقت الاضافي المقصود منها هو مثلا ساعة من الوقت كما وضعتها في ملف الاتصال
    if( file_exists($cache.'news-0'.$id.'.html') && (filectime($cache.'news-'.$id.'.html')+$exp) > time() ){
        
    // تضمين ملف الكاش واظهاره كأن النتيجة من قاعدة البيانات
        
    include($cache.'news-'.$id.'.html');
    }else{
        
    // اذا كان المتغير الذي يحمل رقم المقالات المخزنة في القاعدة لا يعمل اذا سنعرض اخر عشر عناوين  من القاعدة
        
    if( !isset($id) ){
            
            
    // طباعة اخر 10 مقالات
            
    $query=mysql_query"select  from news limit 10");
            
    // اذا كان جدول المقالات غير فارغ
            
    if( mysql_num_rows$query) > ) {
                while( 
    $row=mysql_fetch_array($query) ){
                    echo 
    $row['id']." رقم المقال <br />";
                    echo 
    $row['text']." نص المقال <br />";
                }
            }else{
                echo 
    "لا يوجد اي نتائج";
        
        }else{
            
    // طباعة المقال الذي حمل رقم
            
    $query=mysql_query"select  from news where id='$id' ");
            
    // اذا كان رقم المقال موجود في القاعدة اي يوجد نتيجة اكبر من صفر
            
    if( mysql_num_rows$query) > ) {
                while( 
    $row=mysql_fetch_array($query) ){
                    echo 
    $row['id']." رقم المقال <br />";
                    echo 
    $row['news']." نص المقال <br />";
                }
            }else{
                echo 
    "لا يوجد اي نتائج";
            }
        }
        
    $data=ob_get_contents(); // حفظ المعلومات المتدفقة في متغير
        
    echo $data// طباعة المحتوى
        // هنا سنقوم بانشاء او تعديل ملف وحفظ فيه معلومات المنتغير $data
        
    $fp=fopen($cache.'news-'.$id.'.html','w+'); // انشاء الملف
        
    fwrite($fp,$data); // الكتابة على الملف
        
    ob_clean(); //مسح الذاكرة
    }

    ?>
    والحمد لله على اكمال الدرس

    والسلام عليكم





    __________________
    عدت
    اقتراحاتكم -> www.elbachiri.com


  2. #2


    هل جربت التعامل مع مسرعات ال php ومنها ال xcache ؟
    تتيح لك تلك المسرعات بدوال قليلة ( 5 دوال ) علي حفظ ناتج في الذاكرة يمكنك من عمل serialize له وحفظه ومناداته في أي وقت او حذفه من الذاكرة إلخ
    وهذه تريح كثير من نظام الملفات خاصة أن الذاكرة أسرع بكثير

    وجزيل الشكر علي الشرح





    __________________
    السيف أصدق أنباء من الكتب

  3. #3


    لم اسمع به من قبل سأتطلع عليه شكرا لك
    ياريت لو تضع شرح في هذا الموضوع او موضوع مستقل





    __________________
    عدت
    اقتراحاتكم -> www.elbachiri.com

  4. #4
    عضو جديد
    تاريخ التسجيل
    Jan 2009
    المشاركات
    7


    السلام عليكم

    شرح مميز جدا أستاذ عبد الواحد وجاري القراءة

    تحياتي لك ...





    __________________
    سبحان الله وبحمده ... والله أكبر

  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    جزاك الله خيرا على الشرح .. اسمح لي بوضع لمحة عن عملية تخزين البيانات caching

    في رأيي هناك شقين لا ينفصلان عند اجراء هذه العملية:

    = الشق الأول: وهو ما تقدمه المسرعات حيث أنها -الى جانب عملها في اختزال الكود وتسريعه- تقدم لنا امكانية تخزين بيانات معينة،
    وربما عمل بعض العديلات عليها مع كل طلب للصفحة- ثم استرجاع هذه البيانات لاستعمالها في البرنامج أو عرضها للزائر.
    و أنواعها كثيرة ارجح منها APC ثم xcache ..

    = الشق الثاني: وهو البنية البرمجية للبرنامج نفسه .. وهنا تكمن المهارة في تحديد الأجزاء التي سيتم حفظها ومستويات الحفظ. وتعتمد الاستفادة من الكاش على:

    - كمية البيانات المخزنة -لما ستوفره من معالجة للبيانات أو استعلامات قاعدة البيانات
    - إطالة أزمنة مكوث هذه البيانات في الكاش.


    * في بعض الأحيان قد لا يكون من الحكمة وضع جزء كبير من البيانات على الذاكرة! لذلك يتم فرز البيانات وتوزيعها على عدة مستويات.
    تكون أقربها باستخدام الرام. وباقي المستويات تعتمد على قاعدة البيانات أو الملفات.





    __________________
    محمد حمود.

  6. #6


    لم اسمع به من قبل سأتطلع عليه شكرا لك
    ياريت لو تضع شرح في هذا الموضوع او موضوع مستقل
    تفضل
    XcacheApi – XCache

    هم فقط 6 دوال قمة في السهولة

    كود PHP:
    mixed xcache_get(string name)
    bool  xcache_set(string namemixed value [, int ttl])
    bool  xcache_isset(string name)
    bool  xcache_unset(string name)
    int   xcache_inc(string name [, int value [, int ttl]])
    int   xcache_dec(string name [, int value [, int ttl]]) 
    جزاك الله خيرا على الشرح .. اسمح لي بوضع لمحة عن عملية تخزين البيانات caching

    في رأيي هناك شقين لا ينفصلان عند اجراء هذه العملية:

    = الشق الأول: وهو ما تقدمه المسرعات حيث أنها -الى جانب عملها في اختزال الكود وتسريعه- تقدم لنا امكانية تخزين بيانات معينة،
    وربما عمل بعض العديلات عليها مع كل طلب للصفحة- ثم استرجاع هذه البيانات لاستعمالها في البرنامج أو عرضها للزائر.
    و أنواعها كثيرة ارجح منها APC ثم xcache ..

    = الشق الثاني: وهو البنية البرمجية للبرنامج نفسه .. وهنا تكمن المهارة في تحديد الأجزاء التي سيتم حفظها ومستويات الحفظ. وتعتمد الاستفادة من الكاش على:

    - كمية البيانات المخزنة -لما ستوفره من معالجة للبيانات أو استعلامات قاعدة البيانات
    - إطالة أزمنة مكوث هذه البيانات في الكاش.


    * في بعض الأحيان قد لا يكون من الحكمة وضع جزء كبير من البيانات على الذاكرة! لذلك يتم فرز البيانات وتوزيعها على عدة مستويات.
    تكون أقربها باستخدام الرام. وباقي المستويات تعتمد على قاعدة البيانات أو الملفات.
    بالطبع أخي تخزين محتوي موضوع مثلاً ل 24 ساعه في الذاكرة يكون إختيار غير مناسب
    هناك أمور نكيشها في الذاكرة وهي الأكثر إستخداماً مثل التصنيفات ومعلوماتها ومجموعات الأعضاء وبياناتها وإحصائيات الموقع

    وهناك أمور نخزنها علي الهاردديسك نفسه ويكون سرعة جلبه هو نفس سرعة الجلب من قواعد البيانات كون قواعد البيانات علي الهاردديسك أصلاً
    ولكن وفرنا وقت الترجمة لتعليمة السكول والتنفيذ لها وهذا في حد ذاته معظم العمل ( هذا ما يشكل الحمل علي المعالج للترجمة والتنفيذ وعلي الباص لنقل البيانات المطلوبة للذاكرة إلخ )
    ولكن لا يعني ذلك أن نخزن كل شيئ وإلا سنعود من جديد للمواقع القديمة قبل إستخدام الداتا بيز

    لهذا أفضل حل دائما هو أن يفكر المبرمج في كل تعليمة سكول علي حدي
    هذه تحتاج كاش للرام
    وهذه تحتاج علي الهارد
    وهيه لا تحتاج
    وهذه لا يمكن معها عمل كاش
    وهذه نحتاج فقط لجزء منها

    إلخ

    أيضا طريقة تحديث الكاش هي فن
    هناك أوقات نحدث البيانات لما يحدث تعديل فقط ( مثلاً مجموعات الأعضاء نحدثها فقط لو ادخل المشرف العام تعديلات جديدة أو أحدث الموضوعات نحدثها فقط لما يضاف موضوع جديد إلخ)
    وهناك أوقات نحدثها كل زمن محدد مستخدمين الكرون ( الإحصائيات مثلاً نحدثها كل ساعة )

    سينج لنا ذلك برمجة قمة في الخفة والنشاط والحيوية رغم انها ستكون مليئة بالإمكانيات الغير موجودة في غيرها

    تخيل معي قمت بعمل مكتبة برامج كاملة فيها صفحة مليئة بأكثر من 10 خصائص معظمها غير موجودة في أي مكتبة برامج أخر

    ومتوسط تعليمات السكول 5 تعليمات سكول فقط كل صفحة :app:





    __________________
    السيف أصدق أنباء من الكتب

  7. #7


    Nadjme
    شكرا لك على المرور اتمنى ان تستفيد

    mr_m المجروح

    ما تفضلتم به جميل جدا وعملي كذالك لا ننسى التعليمات الصحيحة ل mysql

    كذالك انا تكلمت وشرحت فكرة الكاش التقليدية وكما فهمتها بدون تقنيات جديدة كما ذكر الأخ المجروح





    __________________
    عدت
    اقتراحاتكم -> www.elbachiri.com

  8. #8


    Nadjme
    شكرا لك على المرور اتمنى ان تستفيد

    mr_m المجروح

    ما تفضلتم به جميل جدا وعملي كذالك لا ننسى التعليمات الصحيحة ل mysql

    كذالك انا تكلمت وشرحت فكرة الكاش التقليدية وكما فهمتها بدون تقنيات جديدة كما ذكر الأخ المجروح
    هي ليست طريقة تقليدية أخي بل هي مطلوبة لسببين

    - حتي مع المسرعات تحتاج لهذه الطريقة كون ليس كل شيئ يمكن تخزينه في الذاكرة
    - هناك مواقع لا يتوفر لدي مستضيفهم مسرعات ولا يريد توفيرها

    لهذا الكثير من البرامج التي تقدم معها خدمة تحسين الاداء بالمسرعات تقدم معها إستخدام كاش الملفات كحيار إضافي
    وعموما هناك عدة أنظمة للكاش مع ال php نفسها كمكتبات وممكن فيما بعد يتم إعتماد واحدة
    هناك مثلاً mmcache حسب ما اذكر





    __________________
    السيف أصدق أنباء من الكتب

  9. #9
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    بالطبع أخي تخزين محتوي موضوع مثلاً ل 24 ساعه في الذاكرة يكون إختيار غير مناسب
    هناك أمور نكيشها في الذاكرة وهي الأكثر إستخداماً مثل التصنيفات ومعلوماتها ومجموعات الأعضاء وبياناتها وإحصائيات الموقع

    وهناك أمور نخزنها علي الهاردديسك نفسه ويكون سرعة جلبه هو نفس سرعة الجلب من قواعد البيانات كون قواعد البيانات علي الهاردديسك أصلاً
    ولكن وفرنا وقت الترجمة لتعليمة السكول والتنفيذ لها وهذا في حد ذاته معظم العمل ( هذا ما يشكل الحمل علي المعالج للترجمة والتنفيذ وعلي الباص لنقل البيانات المطلوبة للذاكرة إلخ )
    ولكن لا يعني ذلك أن نخزن كل شيئ وإلا سنعود من جديد للمواقع القديمة قبل إستخدام الداتا بيز

    لهذا أفضل حل دائما هو أن يفكر المبرمج في كل تعليمة سكول علي حدي
    هذه تحتاج كاش للرام
    وهذه تحتاج علي الهارد
    وهيه لا تحتاج
    وهذه لا يمكن معها عمل كاش
    وهذه نحتاج فقط لجزء منها

    إلخ

    أيضا طريقة تحديث الكاش هي فن
    هناك أوقات نحدث البيانات لما يحدث تعديل فقط ( مثلاً مجموعات الأعضاء نحدثها فقط لو ادخل المشرف العام تعديلات جديدة أو أحدث الموضوعات نحدثها فقط لما يضاف موضوع جديد إلخ)
    وهناك أوقات نحدثها كل زمن محدد مستخدمين الكرون ( الإحصائيات مثلاً نحدثها كل ساعة )

    سينج لنا ذلك برمجة قمة في الخفة والنشاط والحيوية رغم انها ستكون مليئة بالإمكانيات الغير موجودة في غيرها

    تخيل معي قمت بعمل مكتبة برامج كاملة فيها صفحة مليئة بأكثر من 10 خصائص معظمها غير موجودة في أي مكتبة برامج أخر

    ومتوسط تعليمات السكول 5 تعليمات سكول فقط كل صفحة :app:
    مما يمكن ذكره أيضا أن هناك عدة أساليب رئيسية لعمل الكاش لذلك تنبغي القراءة عنها .. فهذا مجال ممتع ويوفر الكثير.

    الجدير بالذكر أنه في برامج ادارة المحتوى قد تحصل -معجزات- اذا صح التعبير ..
    فقد يكون عدد الاستعلامات الى الزوار 3 : 1 وقد تصل النسبة الى 0.9 : 1
    وهذا بسبب دراسة الكود + ا لـ هـ يـ كـ ل البرمجي المبني اساسا لغرض ال caching





    __________________
    محمد حمود.

  10. #10
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613

  11. #11
    عضو نشيط
    تاريخ التسجيل
    Jan 2008
    المشاركات
    75


    شكرا شباب على الشرح .. والله انا كنت ببرمج موقع و المشكل الوحيد معاي هو الملفات المؤقة .. حطبق انشاء الله .وباريت لو في رابط مفيد للتطبيق





    __________________
    Graphic Designing
    Adobe ( Photoshop, Illustrateur, Indesign ) / Corel Draw / CINEMA 4D / 3D Max / Mac Flash, Front page2003
    Programming
    (Java, HTML,Css , PHP , (Still Learning.

  12. #12
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    659


    فقط للفائدة

    في CI طريقة عمل Cache هي بسطر واحد فقط :

    كود PHP:
    $this->output->cache(5); 
    حيث ان الرقم 5 يعني 5 دقائق


    ارق التحية





    __________________
    مدونتي | تويتر


  13. #13


    فقط للفائدة

    في CI طريقة عمل Cache هي بسطر واحد فقط :

    كود PHP:
    $this->output->cache(5); 
    حيث ان الرقم 5 يعني 5 دقائق


    ارق التحية
    سهلة أخي عملت كلاس يعمل كاش أفضل من الموجود بكود أجنيتر
    كون كاش الكود اجنيتر يخزن في الملفات فقط
    الكلاس لدي تستخدم 3 أنظمة

    xcache
    APC
    نظام الملفات

    وبالتالي تعطيها ما تريد تخزينه وتعطيها أيضا الوقت او لو هتخلي تحديثها بمناداة تكتب دالة لذلك تناديها وقتما تريد
    وكمان تحدد لها هل تخزن في الرام ( بإستخدام مسرع ) أم الملفات

    بالماسبة نظام الكاش المعتمد علي ملفات وزمن للملف أصبح من الماضي

    البرمجيات المتقدمة الأن تجد الكاش فيها مرتبط إما ب action أو بالكرون





    __________________
    السيف أصدق أنباء من الكتب

  14. #14
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    almosmm صراحة لا اقتنع بان CodeIgniter مفيدة في ال caching

    بسبب استهلاكها لموارد النظام الذي تسببه هي بمفردها + الكاش الموجودة بها وطريقة التحكم بدائيتين.


    بالماسبة نظام الكاش المعتمد علي ملفات وزمن للملف أصبح من الماضي

    البرمجيات المتقدمة الأن تجد الكاش فيها مرتبط إما ب action أو بالكرون
    اعمل في وقت الفراغ على ادخال ال AI بشكل بشكل كبير للتحكم في ال caching rules وتغييرها.

    حيث يفهم البرنامج طبيعة تعامل المستخدمين مع المحتوى من خلال تحليل بعض الاحصائيات

    مثل اماكن الضغطات و اوقات المكوث في الصفحة و الدول .... الخ.

    على ما اراه منها الآن .. فلن تحتاج المواقع اكثر من استضافة shared الا لغرض تقديم خدمات مراكز التحميل وخلافه.

    باذن الله اذا تم التطوير بشكل جيد قد تتاح منها اصدارات open source و عمل كتاب مجاني للشرح.





    __________________
    محمد حمود.

  15. #15


    شكراً على الشرح المبسط
    ملحوظه بسيطه .. نسيت
    كود PHP:
    fclose($fp); 
    بعد التعديل على ملف الكاش ..





    __________________
    بيبرس لحلول الويب
    www.bibrs.com





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض