Php dosyalarını önbelleğe almak için en iyi yolu nedir?

2 Cevap php

Benim php kodu ile Smarty kullanarak yaşıyorum ve ben bu yüzden aşağıdaki kodu kullanılan web sayfalarının bazı önbelleğe istiyorum:

// TOP of script
ob_start();   // start the output buffer
$cachefile ="cache/cachefile.html";
// normal PHP script 
$smarty->display('somefile.tpl.html') ;
$fp = fopen($cachefile, 'w'); // open the cache file for writing
fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file
fclose($fp); // close the file
ob_end_flush(); // Send the output to the browser

i php dosyanın sonunda ob_get_contents () yazdırırken ama boş! ve aslında oluşturulan önbellek dosyası da boş! i smarty kullanırken yüzden nasıl i smarty önbelleği kullanabilir biliyorum ama nedense benim için çalışmak değil php dosyalarını önbelleğe olabilir.

in addition please give me information about APC cache . how to use it? is it worth using in my case , i thin it's just for caching database queries , i read the php manual about it but i can't get anything :) tanks .

2 Cevap

Eğer (ob_end_flush denir sonra) tekrar ob_get_contents () diyorsun demek? Eğer öyleyse, dosyaya yazdığı şeyler PHP'nin belleğinden "silinmiş" edilmiş olacaktır.

Önce bir değişkene ob_end_flush kaydetmek, HTML hala çıkış isterseniz, o fwrite bu geçmektedir. Daha sonra sayfayı aşağı değişken kullanabilirsiniz.

Ben smarty önbellek daha eksiksiz bir örnek için (yer here) belgelerine bazı kod kadar püresi ettik. Ayrıca, ben size örnek kullanarak ne emin değilim, ama önbellek işlemek için smarty yöntemlerini kullanıyor olmalıdır.

    require('Smarty.class.php');
    $smarty = new Smarty;

    // 1 Means use the cache time defined in this file, 
    // 2 means use cache time defined in the cache itself
    $smarty->caching = 2; 

    // set the cache_lifetime for index.tpl to 5 minutes
    $smarty->cache_lifetime = 300;

    // Check if a cache exists for this file, if one doesn't exist assign variables etc
    if(!$smarty->is_cached('index.tpl')) {
        $contents = get_database_contents();
        $smarty->assign($contents);
    }

    // Display the output of index.tpl, will be from cache if one exists
    $smarty->display('index.tpl');

    // set the cache_lifetime for home.tpl to 1 hour
    $smarty->cache_lifetime = 3600;

    // Check if a cache exists for this file, if one doesn't exist assign variables etc
    if(!$smarty->is_cached('home.tpl')) {
        $contents = get_database_contents();
        $smarty->assign($contents);
    }

    // Display the output of index.tpl, will be from cache if one exists
    $smarty->display('home.tpl');

APC önbellek gelince, ukala yapar aynı şekilde çalışacaktır. Her ikisi de bir zaman belirli bir süre için bir dosyada veri depolamak. Eğer verilere erişmek istiyorsanız her zaman, önbellek geçerli olup olmadığını kontrol eder, ve böylece önbellek değerini döndürür.

However, if not using smarty you can use APC as such:
This example goes through storing the result of a DB query in the cache, similarly, you can modify this to instead store the entire page output so you don't have to run expensive PHP functions frequently.

// A class to make APC management easier
class CacheManager  
{  
     public function get($key)  
     {  
          return apc_fetch($key);  
     }  

     public function store($key, $data, $ttl)  
     {  
          return apc_store($key, $data, $ttl);  
     }  

     public function delete($key)  
     {  
          return apc_delete($key);  
     }  
}

Bazı mantık ile birlikte,

function getNews()  
{  
     $query_string = 'SELECT * FROM news ORDER BY date_created DESC limit 5';  

     // see if this is cached first...  
     if($data = CacheManager::get(md5($query_string)))  
     {  
        	 // It was stored, return the value
          $result = $data;  
     }  
     else  
     {  
        	 // It wasn't stored, so run the query
          $result = mysql_query($query_string, $link);  
          $resultsArray = array();  

          while($line = mysql_fetch_object($result))  
          {  
               $resultsArray[] = $line;  
          }  

    		 // Save the result inside the cache for 3600 seconds
          CacheManager::set(md5($query_string), $resultsArray, 3600);  
     }  

     // Continue on with more functions if necessary 
}

Bu örnek, hafif here değiştirilir.