Сен 15
кэширование данных получаемых из mySQL
начинающим PHPистам1. Кэшированое содержимое хранится в папке:
$_SERVER['DOCUMENT_ROOT']."/_cash/
2. Все таблицы должны содержать поле: _lastmodifed
функция PrepareTable($название_таблицы) используется для добавления данного поля к таблице
(используйте ее один раз для прогона по всем таблицам)
Для получения данных используется функция:
function GetContent(
$имя_таблицы,
$уникальное_значение_записи,
$поле_таблицы_с_данными (по умолчанию "content"),
$столбец_с_уникалньым_значением (по умолчанию "id")
)
При изменении данных необходимо использовать:
function UpdateContent(
$имя_таблицы,
$уникальное_значение_записи,
$поле_таблицы_с_данными (по умолчанию "content"),
$столбец_с_уникалньым_значением (по умолчанию "id")
)
<?php class DBCash { function DBCash() { clearstatcache (); } function GetContent($table,$id,$field='content',$key='id'){ //поиск файла с данным контентом $tm=htmlspecialchars($table."_".$field."_".$id); $mtime=0; foreach (glob($_SERVER['DOCUMENT_ROOT']."/_cash/$tm*") as $filename) { $cfile=basename($filename); $mtime=substr($cfile,strpos(basename($filename),".")+1); } if ($mtime>0) $time="AND _lastmodifed>$mtime"; else $time=""; $result=mysql_query("SELECT $field, _lastmodifed FROM $table WHERE $key='$id' $time") or Die('#DBCash.CLASS# Unable to access DB <hr>'.mysql_error()); @$row = mysql_fetch_array($result, MYSQL_ASSOC); @$last=$row["_lastmodifed"]; @$content=$row[$field]; @mysql_free_result($r1); if (@strlen(trim($content))>2) {//UPDATED CONTENT $filename=$_SERVER['DOCUMENT_ROOT']."/_cash/$tm.".$last; $handle = fopen($filename, 'w'); fwrite($handle, $content); fclose($handle); return $content; } else return @implode("",file("_cash/$cfile"))." <!-- кэшированая копия -->"; } function UpdateContent($table,$id,$field='content',$key='id'){ $now=time(); mysql_query("UPDATE $table SET _lastmodifed=$now WHERE $key='$id'") or Die('#DBCash.CLASS# Unable to access DB <hr>'.mysql_error()); } function PrepareTable($table){ @mysql_query("ALTER TABLE `$table` ADD `_lastmodifed` INT DEFAULT '0' NOT NULL ;"); } } ?>
Примеры:
<?php $DB = new DBCash(); //добавление в table1 поля _lastmodifed $DB->PrepareTable('table1'); //пример вызова для обновления поля content (по умолчанию) в table1 ряда с id=1 $DB->UpdateContent('table1',1); //пример вызова для обновления поля article в table1 ряда с id=1 $DB->UpdateContent('table1',1,'article'); //пример вызова для обновления поля article в table1 ряда с page_id=1 $DB->UpdateContent('table1',1,'article','page_id'); //пример вызова для получения содержимого поля article в table1 ряда с id=1 $DB->GetContent('table',1,'article'); ?>
Сен 11
простая философия
на злобу дня- Думаю не ошибусь, если ничего не скажу.
- Когда нет определенной цели, стреляют без промаха.
- Мозг человека на 98% состоит из воды. А некоторым еще и не доливают.
- Как учит Кама Сутра - безвыходных положений не бывает.
- Если не можешь победить честно, просто победи!
- Лучше с любовью заниматься трудом, чем с трудом заниматься любовью.
- Вежливость - самая приемлимая форма лицемерия.
- Словом можно обидеть. Словарем - убить.



