где взять пока временная ссылка (30 дней) http://www.uploading.com/files/RYXBWP64/dbcache.zip.html возможно скоро открою постоянную страницу как работает берет хеш запроса, который является именем файла. если время последнего update +livetime (sec) менее time() - текущее время то кеш считается устаревшим, данные берутся из БД, как впрочем, если данных в кеше нет. если кеш - актуален, то данные берутся из кеша. что представляет кеш csv файл, в котором символы ';' и '\n' закодиорованны. Зависимости PHP от 5.1 и выше Модуль dbcache зависит от модуля mysqli, модуль mysqli должен быть установлен. Тестирование: На Linux Mandrake 10.0 PHP 5.2.0 - замечался SigFault На Linux Mandrake 10.0 PHP 5.1.4 - стабильно На FreeBSD 6.0 PHP 5.2.2 - стабильно Инсталляция. 1. скопировать всю папку dbcache в php-src/ext 2. скопировать все заголовочные файлы из php-src/ext/mysqli в /usr/local/includes/php/ext/mysqli cp php-src/ext/mysqli/*.h /usr/local/includes/php/ext/mysqli 3. cd php-src/ext/dbcache 4. phpize 5. ./configure 6. добавить пути в Makefile : -I/usr/local/include/mysql -I/usr/local/include/php/ext/date/lib -I/usr/local/include/php/ext/mysqli у меня это строка 34 см. Makefile.old : INCLUDES = ... очевидно это можно сделать с помощью configure, буду любезен за подсказку. 7. make && make install 8. создать директорию для кеша. Пример использования: PHP: $mysqli = new mysqli("localhost", "akalend", "", "test") or die('Connect failed'); $cacheDir = '/home/akalend/cache'; // полный путь до кеш-директории. $dc = new dbCache( $cacheDir ); $dc->bind( $mysqli ); // привязка к mysqli object $query="select * from test_data limit 50"; $livetime = 500; // время жизни кеша в секундах $dc->query($query, $livetime); // выполнение запроса while( $res = $dc->fetch() ){ // fetching data, возвращает массив строки или false при достижении конца. print_r($res); } print_r( $dc->getInfo() ); // вывод отладочной информации Ограничения - размер одного поля не должен превышать 1000 символов - не используются BLOB поля (если нужно, то решим в ближайшее время) Почему модуль привязан к mysqli? это связано с тем, что в приложении как правило есть и некешируемые запросы, хотелосьбы использовать одну коннекцию. Так как модуль mysqli наиболее популярный, то было решено использовать уже открытую коннекцию от туда. Планируется ли привязка модуля к PDO mysql? пока нет, так же как и к другим БД, хотя на мой взгляд это не так и сложно. хочу довести модуль до стабильной версии. Почему указывается полный путь: ну, как правило - файловый кеш выносится за приделы httpdoc, даже желательно вынести на другой физический диск. всегда можно знать полный путь до своего httpdoc. Чистится ли кеш? нет, чистильщика кеша не предусмотренно, во первых - всегда можно сделать написать скрипт, который бы запускался по крону и проверял актуальность данных в кеше... во вторых - кешируются, как правило только те данные, которые часто используются. редкоиспользуемые данные - кешировать не имеет смысла. Планы. в планах привязка к PDO и мемкешу.
Эм, скажите, зачем это в виде PHP extension, если на PHP это делается в десять строк и никаких ограничений на данные?