hehehe, to jest dokładnie to, co kiedyś Damianmyst mi proponował abym zrobił do swojej modyfikacji
Powodzenia życzę z tym cachowaniem. Robiłem testy jego wydajności i niestety nie były zadowalające, głównie z powodu file_get_contents() za każdym razem, czyli otwieranie pliku, odczytywanie danych i wpisywanie do zmiennej, zamykanie pliku. O ile przy bardzo obciążających i duzych wynikach zapytań lub duzych tabelach takie cachowanie będzie znacznie szybsze od wyniku z SQL, o tyle przy małych zapytaniach ta różnica będzie znikoma.
Może sie komus przyda moje cachowanie prostsze i tym samym szybsze:
Kod:
function sql_cache($mode, $file, $data = '')
{
global $phpbb_root_path, $phpEx;
$cache_dir = $phpbb_root_path . 'cache/';
$filename = $cache_dir . $file . ".$phpEx";
if ( !(@is_writable($cache_dir)) )
{
return false;
}
if ( $mode == 'check' )
{
$file_exists = @file_exists($filename);
if ( $file_exists && filesize($filename) > 30 )
{
return $filename;
}
else
{
if ( $file_exists )
{
return 0;
}
else
{
return false;
}
}
}
else if ( $mode == 'write' )
{
if ( !($fp = @fopen($filename, 'w')) )
{
return false;
}
@flock($fp, 2);
$data = ($data) ? "<?php\n \$$file = unserialize('" . str_replace("'", "\'", str_replace('\\', '\\\\', serialize($data))) . "');\n?>" : "<?php\n?>";
if ( !(@fwrite($fp, $data)) )
{
@flock($fp, 3);
return false;
}
@fclose($fp);
unset($data);
return true;
}
else if ( $mode == 'clear' )
{
if ( strpos($file, 'multisqlcache_') !== false )
{
$dir = opendir($cache_dir);
while($filename = readdir($dir))
{
if ( strpos($filename, $file) !== false )
{
@unlink ($cache_dir . $filename);
}
}
closedir($dir);
}
else
{
@unlink($filename);
}
return;
}
}
Wykorzystanie poprzez:
Kod:
if ( $check_cache = sql_cache('check', 'board_config') )
{
include($check_cache);
}
else
{
$sql = "SELECT *
FROM " . CONFIG_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_ERROR, 'Could not get config data');
}
while ( $row = $db->sql_fetchrow($result) )
{
$board_config[$row['config_name']] = $row['config_value'];
}
sql_cache('write', 'board_config', $board_config);
}
Czyszczenie poprzez:
Kod:
sql_cache('clear', 'board_config');
phpBB modified by Przemo