Ich habe etwas Code aus der Dokumentation (befindet sich here) für ein vollständigeres Beispiel des Smarty-Cache. Außerdem bin ich mir nicht sicher, was Sie in Ihrem Beispiel verwendet haben, aber Sie sollten die Methoden von smarty verwenden, um den Cache zu manipulieren.
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');
Wie für APC-Cache wird es auf die gleiche Weise wie Smarty funktioniert. Beide speichern die Daten für eine bestimmte Zeit in einer Datei. Jedes Mal, wenn Sie auf die Daten zugreifen möchten, prüft es, ob der Cache gültig ist, und gibt den Cache-Wert zurück.
Wenn jedoch nicht Smarty verwenden, können Sie APC als solche verwendet werden:
Dieses Beispiel geht durch das Ergebnis einer DB-Abfrage im Cache speichern, in ähnlicher Weise, können Sie dies stattdessen die gesamte Seite ausgegeben, so dass Sie don speichern ändern Ich muss nicht oft teure PHP-Funktionen ausführen.
// 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);
}
}
mit einer gewissen Logik Zusammen
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
}
Dieses Beispiel ist leicht von here modifiziert.
@lan Elliott ja, Smarty Caching ist eine gute Idee, aber ich kann es nicht verwenden. weil ich nur ein $ smarty-> display ('index.tpl') habe; und der Rest von anderen Seiten wie news.tpl kommt in mein index.tpl Center wie folgt {include file = $ page_center} dann benutze ich in der Datei news.php diese Zeile $ smarty-> assign ('page_center', 'news.tpl "); aber wenn ich Caching aktiviere, zeige es mir immer noch den Standardinhalt von Page Center nicht news.tpl, aber wenn ich Caching getan habe, funktioniert es gut. – mehdi
@mehdi Das klingt so, als müssten Sie benutzerdefinierte Cache-IDs verwenden - so können Sie so viele Versionen von 'index.tpl' zwischenspeichern, wie Sie möchten. z.B. in 'news.php' würde man' $ smarty-> display ('index.tpl', 'news |'. $ article_id); 'Für Hilfeseiten eine Cache-ID von' 'help |' . $ topic' usw. (Mit dem Pipe-Zeichen zur Strukturierung Ihrer Cache-IDs können Sie den Cache selektiv löschen, z. B. alle Nachrichtenartikel gleichzeitig löschen.) – searlea