صفحة 2 من 3 الأولىالأولى 123 الأخيرةالأخيرة
النتائج 16 إلى 30 من 32

الموضوع: إستعلامات mysql متقدمة

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


    ماذا لو أردنا بناء نظام cache بسيط .. فكيف ستكون الفكرة العامة له ؟






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


    محاولة بسيطة لم تنجح ..

    cache.php
    كود PHP:
    function cache($cache$expire) {
        
    $cache1 'cache/'.$cache.'.cache';
        if (!(
    file_exists($cache1) and filemtime($cache1) > (time() - $expire))) {
            
    ob_start();
            include(
    $cache);
            
    $content ob_get_contents();
            
    ob_end_clean();
            
    $fopen fopen($cache1'w');
            
    fwrite($fopen$content);
            
    fclose($fopen);
        }
        return 
    file_get_contents($cache1);

    index.php
    كود PHP:
    include('cache.php');

    echo 
    '<h1>'.date('h:s:i').'</h1>';

    cache('index.php'10); 
    ويتم تخزين ملفات الـ cache في مجلد بإسم cache






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


    وجدتها !
    كود PHP:
    $cache_file 'index.php';
    $cache_time 10 60// seconds

    $cache_file 'cache/'.md5($cache_file).'.cache';
    if (
    file_exists($cache_file) and time() - $cache_time filemtime($cache_file)) {
        include(
    $cache_file);
        exit();
    }

    ob_start();

    // start

    echo '<h1>'.date('h:s:i a').'</h1>';

    // end

    $fp fopen($cache_file'w');
    fwrite($fpob_get_contents());
    fclose($fp);

    ob_end_flush(); 
    حسناً الآن نريد تحويله الى دالة أو صِنف ، نريد أن تكون طريقة إستخدامه
    كود PHP:
    include('cache.php');
    cache(10 60);
    echo 
    '<h1>'.date('h:s:i a').'</h1>'







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


    أعلم أن الموضوع إنحرف عن مساره الأصلي ، ففي البداية تحدثنا عن الإستعلام الفرعي ، ومن ثم إنتقلنا إلى الـ mysql query cache ، وبعد ذلك توجهنا للـ cache ، لكن دعونا نخرج بشيء مفيد من هذا الموضوع ، لنخرج بنظام cache بسيط يستعمل للتطبيقات البسيطة ، كنت قد وضعت النواة لهذا النظام في الرد السابق ، بإنتظار آراءكم وتطويراتكم .








  5. السلام عليكم.. لماذا لا نستخدم خواص الPHP5؟ .. لماذا لا نطور نفسنا قليلا؟

    الطريقه التي سأطرحها لكم هي فكره قديمه تكلمت عنها في الموضوع http://www.swalif.net/softs/swalif45...8/#post1584325

    الكلاس يستخدم الكلاس المفتوح المصدر CacheLite الموجود في اكثر السرفرات ... واذا لم يجد لديك قم بكتاب
    كود:
    pear install Cache_Lite
    على الDOS .. ونفس الطريقه على الlinux والmacOS

    الكلاس اللذي عملته هو



    كود PHP:

    <?
    /* استخدم الكلاس المفتوح المصدر */
    require_once 'Cache/Lite.php';
    /* ادراج ملف الكونفج */
    require_once 'CacheConfig.php';

    class 
    CacheSite{
      var 
    $config;
      var 
    $id;
      var 
    $Cache_Lite;
      var 
    $createNewCache true;

    /* الفنكسن الرأيسي */
      
    function CacheSite($configSettings){
    /* استخدام اي دي  مختلف لكل صفحه */  
      
    $this->id str_replace(array('/','\\','?','='),'_','ID'.$_SERVER['PHP_SELF']);
        
    $this->config $configSettings;

    /* استحدام ملف الكونفج */
    $this->Cache_Lite = new Cache_Lite($this->config);

    /* اذا كانت هناك نسخه قديمه ولم ينتهي صلاحيته .. اطبعها واوقف البرنامج .. */
        
    if ($data $this->Cache_Lite->get($this->id)) {
          
    $this->createNewCache false;
          echo 
    $data;
          exit();
        } else {
          
    ob_start();
        }
      }


    /* عندما ينتهي عمل البرنامج .. هذا الفنكسن سيعمل اوتوماتيكيا */
    function __destruct(){
        if(
    $this->createNewCache){
          
    $data ob_get_contents();

    /* ضع الناتج في ملف على مجلد معروف عن طريق الكونفج */
          
    $this->Cache_Lite->save($data$this->id);
          
    ob_get_clean();
          echo 
    $data;
        }
      }

    }

    $cacheObject = new CacheSite($cacheConfig);
    ?>
    ملف الكونفج: طبعا قم بتغير ما يلزم .. لان مكان الcacheDir هو المكان الخاص على جهازي
    كود PHP:
    <?
    $cacheConfig 
    = array(
      
    'cacheDir' => '/home/khalid/Sites/docs/test/cache/'// المجل الموجود فيه الكاش
      
    'lifeTime' => '100'// عدد الثواني الى تاريخ انتهاء الكاش
    );
    ?>
    وطريقه الاستخدام سهله، قم فقط بوضع السطر التالي في بدايه الملف اللذي تود ان تفعل كاش به
    كود PHP:
    require_once './cacheClass.php'
    سهله صح؟
    حملوا الملفات المرافقه اذا اردتم الملفات كلها.





    الملفات المرفقة الملفات المرفقة
    __________________
    هلابي افضل المواقع العربية تصميماً
    انصح باستخدام ابونتو

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


    أستاذ hilaby ، هذه الطريقة أعرفها مسبقاً ، هدفي ليس الوصول إلى شيء جاهز ، هدفي هو معرفة كيف أصل بنفسي إلى هذا الشيء الجاهز الذي هو في حالتنا ( طريقة عمل الـ cache ) ، أنا مهتم بتعلّم طريقة تطوير الشفرة في ردي ما قبل السابق إلى دالة أو صِنف ليس لمجرد التطوير بل للتعلم ، لكي أتعلم كيفية التحويل في مثل هذه الحالات في المستقبل ، جزاك الله خيراً .

    سؤال للأستاذ daif بما أنه لديه خبرة في الـ cache والمطبقة في برمجية القالب السهل ، ما أود معرفته هو كيف يقوم القالب بمعرفة أنه قد حصل تحديث ما على قاعدة البيانات ؟ ، لقد فهمت الطريقة المبنية على التحقق من وقت تعديل الملف ، ولكنها لا تصلح الا اذا كان لدي ملفين ثابتين أو ملف واحد ووقت اقوم بتحديده ، في القالب السهل لا يتم تحديد الوقت ( حسب تجربتي ) بل يتم تحديث ملفات الـ cache عند حدوث تغيير في قاعدة البيانات ، قد يكون هذا الكلام خاطئاً فلست واثقاً منه إنما أظن ذلك . أتمنى من الأستاذ daif التوضيح بشيء من التفصيل .

    بالمناسبة .. لازلت مهتما بتحويل الإستعلام في أول رد في الموضوع إلى إستعلام بطريقة join .

    شكراً لكم جميعاً






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


    نسيت أن أشكرك على الـ class الذي وضعته ، جميل بالفعل وإستخدام موفق للخاصية __destruct ، شكراً لك مرة أخرى .

    بالمناسبة وبما أنك تطرقت للـ pear ، فإنني لا أزال أواجه مشاكل في تنصيبها ، خصوصاً أنني مضطر لإستخدام نظام الـ windows حالياً





    التعديل الأخير تم بواسطة dev11 ; 26-06-2008 الساعة 04:02 AM

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


    قمت بقراءة الـ class الذي قمت بوضعه مرة أخرى ، حقيقةً أرى لمسة جمالية رائعة وفكر عالي في هذا الـ class ، شكراً لك مرة أخرى






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


    نقطة أخرى .. عند تنفيذ الأمر exit هل سيتم تنفيذ الدالة __destruct أم لا ؟








  10. السلام الاخ dev11
    الاجابه لسؤالك .. نعم ..
    الشرح:
    الامر exit يقف عمل البرنامج وبذالك يبدأ بتنفيذ عمليات مسح المساحه المستخدمه من الذاكره، فلذالك سيعمل ال destruct__





    __________________
    هلابي افضل المواقع العربية تصميماً
    انصح باستخدام ابونتو

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


    يبدو أنني كنت مخطئاً، بعد الإطّلاع على مصدر القالب السهل وجدت أنه يتحقق من تاريخ الملفين ( ملف الـ cache وملف القالب ) ويقارن بينهما ، لكن ماذا عن إستعلامات قاعدة البيانات ؟ بهذه الطريقة لن يتم تحديث البيانات في البرمجية التي ستعرض البيانات ؟ بمعنى أصح .. كيف يمكن إستخدام الـ cache عن طريق الملفات والتأكد في نفس الوقت من عدم حدوث أي تحديث على قاعدة البيانات - وإلا يتم تحديث ملفات الـ cache - ؟ أعتقد أننا سنعود للنقاش حول خاصية الـ mysql query cache التي تدعم هذا الشيء .

    ماذا عن نظام الـ cache
    كود PHP:
    $cache_file 'index.php';
    $cache_time 10 60// seconds

    $cache_file 'cache/'.md5($cache_file).'.cache';
    if (
    file_exists($cache_file) and time() - $cache_time filemtime($cache_file)) {
        include(
    $cache_file);
        exit();
    }

    ob_start();

    // start

    echo '<h1>'.date('h:s:i a').'</h1>';

    // end

    $fp fopen($cache_file'w');
    fwrite($fpob_get_contents());
    fclose($fp);

    ob_end_flush(); 
    ألا توجد أي طريقة لتحويله لدالة او class ؟

    أيضاً ماذا عن الإستعلام
    كود PHP:
    select topic from posts where id in (
        
    select post from r where item = (
            
    select id from items where name 'php' and type 1
        
    )

    كيف يمكن تحويله إلى إستعلام بطريقة الـ join ؟

    أعتذر عن تكرار الأسئلة .. لكن للتأكيد على أهميتها فقط لا غير








  12. انا لا ادري ماذا تفعل القالب السهل. ولكن انا اعرف ان الخطوات الازمه هي لفعل كاش ممتاز:
    اولا قم باستخدام احد كلاسات التي تتعامل مع قواعد البيانات .. اي لا تستخدم الmysql_query مباشرة .. بل قم باستخدام احد الكلاسات . فمثلا الكود قد يكون
    كود:
    $mysql->query('my query');
    في اكثر الاحيان، بـإمكانك وضع شيء يسمى الhooks. وهي callback methods اي فانكشنات تشتغل اوتوماتيكيا بعد حدوث حاله معينه، تعمل تقريبا مثل desturcut__ ولكن هذا يحدده الكلاس. فمثلا اذا قمت باستعلام "update name = "khalid" where id = 4" فالكلاس يحلل الاستعلام ويرى ان هناك استعلام فيه تغير بيانات .. ويعرف ان التغيرات حصلت على جدول فيها update فيقوم بثلا بفعل الفانكشان
    ()callback_after_update_table

    وانت تبدء بتحديد ماذا يفعله ذالك الفنكشن من اعمال.

    ===========
    هذه هي احد خواص البرمجه الكائنيه. وهي فصل الكود الاساسي من الكود المفصل، اي ان الكلاس الاساسي له مبرمجه الخاص والكلاس المستنسخ برمجيا مفصول تماما من الكلاس الاب، ففي هذه الحاله! الكلاس الاب يستطيع ان يعمله له تحديث .. وبدون ان يؤثر على الكود المطور على الكلاس المستنسخ. اي اذا صاحب الاكلاس الاب رأى ان هناك خلل برمجي في كلاسه، فسيرى سهوله في تصحيحها و بدون ان يؤثر في المبرمجين الاخرين.

    لماذا لا اضع مثالا لهذا؟

    main.php

    كود PHP:
    <?php
    class mainClass{

      function 
    takeAction(){
        echo 
    'I will do some thing cool';
        if(
    method_exists($this,'callbackTakeAction')){
          
    $this->callbackTakeAction();
        }    
      }
    }
    ?>
    index.php


    كود PHP:
    <?php
    include 'main.php';

    class 
    myNewImporvedClass extends mainClass{

      function 
    callbackTakeAction(){
        echo 
    ', oh yah? i will do it much more cooler';
      }

    }


    $object = new myNewImporvedClass();

    $object->takeAction();
    // I will do some thing cool, oh yah? i will do it much more cooler

    ?>

    ==============

    الاجابه سؤالك الاخر هي

    كود:
    select * from table1, (
    select topic,id from posts where id in (
        select post from r where item = ( 
          select id from items where name = 'php' and type = 1 
        )   
    ) as table2
    where table1.id = table2.id






    __________________
    هلابي افضل المواقع العربية تصميماً
    انصح باستخدام ابونتو

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


    معلومات قيمة بالفعل ، شكراً لك ، سأحاول التطوير على نظام الـ cache السابق ؟ أي إقتراحات ؟ بالنسبة للإستعلام الذي قمت بوضعه فهو يستخدم طريقة الإستعلام الفرعي .. كيف يمكن تطبيق إستعلام الـ join بدون طريقة الإستعلام الفرعي ؟





    التعديل الأخير تم بواسطة dev11 ; 01-07-2008 الساعة 12:37 AM

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


    وجدته
    كود PHP:
    select topic from postsritems
    where posts
    .id r.post
    and r.item items.id
    and items.name 'php'
    and items.type 







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


    سؤال آخر : لتنفيذ عملية بعد إنتهاء البرنامج نستخدم __destruct .. ماذا لو أردنا تنفيذ عملية تلقائياً قبل بدء البرنامج ؟ بحيث يكون لدي ملف
    كود PHP:
    // دالة تعمل تلقائياً في بداية البرنامج

    function __destruct() {
    // دالة تعمل تلقائياً بعد إنتهاء البرنامج

    وأقوم بتضمينه داخل أي ملف أريد عمل cache له عن طريق الدالة include ويتم ذلك !










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

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

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