Мини профильНавигацияПопулярный материалПользователи онлайнАрхив материалаДрузья |
Оптимизация - кеширование на php Всё равно когда нибудь придётся всё таки учится уменьшать нагрузку на базу данных mysql используя файловое кеширование на php. Расскажу и покажу что как делать чтобы работало. //настроки кеша $cfg = array( 'base_dir' =>'./cache/', 'cache_name' => '.tmp' ); Ключ base_dir содержит в себе путь в папке с кешироваными данными. cache_name содержит расширение файла. Напишем функцию которая будет создавать и заносить в кеш данные function set_cache ( $folder = '' , $file = '' , $cache = '' ) { global $cfg; $error = 'ok'; // Если переменная $folder содержит несуществующие папку, создадим её if( !@file_exists($cfg['base_dir'].$folder) ){ @mkdir($cfg['base_dir'].$folder); } // открываем файл для записи, если нет то создаём выставив маркер "w" $openTmp = @fopen( $cfg['base_dir'].$folder."/".$file.$cfg['cache_name'] , "w" ); if (!$openTmp) { $error = "fopen" ; } // записываем наши данные в файл открытый ранее $writeCache = @fwrite($openTmp, $cache); if (!$writeCache) { $error = "fwrite" ; } // Сохраняем и закрываем файл кеша @fclose($openTmp); return $error; } Функция PHP для чтения данных из кеша. function get_cache ( $folder = '' , $file = '' ) { global $cfg; // Если кеш файла или папки не существует, покажим ошибку if( !@file_exists($cfg['base_dir'].$folder) || !@file_exists($cfg['base_dir'].$folder."/".$file.$cfg['cache_name']) ){ return 0; }else{ return file_get_contents( $cfg['base_dir'].$folder."/".$file.$cfg['cache_name'] ); } } И функция PHP для удаления кеш (Выполняется для обновления данных). function del_cache( $folder = '' , $file = '' ){ global $cfg; $error = 'ok'; // Полное удаление каталога и кеш файла if( !@unlink($cfg['base_dir'].$folder."/".$file.$cfg['cache_name']) ){ $error = "no delete file cache" ; }elseif( !@rmdir($cfg['base_dir'].$folder) ){ $error = "no delete folder" ; } return $error; } Теперь всё это мы соберём вместе и вставим в созданный файл cache.php <?php //настроки кеша $cfg = array( 'base_dir' =>'./cache/', 'cache_name' => '.tmp' ); // напишем пользовательскую функцию создания кеша function set_cache ( $folder = '' , $file = '' , $cache = '' ) { global $cfg; $error = 'ok'; // Если переменная $folder содержит несуществующие папку, создадим её if( !@file_exists($cfg['base_dir'].$folder) ){ @mkdir($cfg['base_dir'].$folder); } // открываем файл для записи, если нет то создаём выставив маркер "w" $openTmp = @fopen( $cfg['base_dir'].$folder."/".$file.$cfg['cache_name'] , "w+" ); if (!$openTmp) { $error = "fopen" ; } // записываем наши данные в файл открытый ранее $writeCache = @fwrite($openTmp, $cache); if (!$writeCache) { $error = "fwrite" ; } // Сохраняем и закрываем файл кеша @fclose($openTmp); return $error; } function get_cache ( $folder = '' , $file = '' ) { global $cfg; // Если кеш файла или папки не существует, покажим ошибку if( !@file_exists($cfg['base_dir'].$folder) || !@file_exists($cfg['base_dir'].$folder."/".$file.$cfg['cache_name']) ){ return 0; }else{ return file_get_contents( $cfg['base_dir'].$folder."/".$file.$cfg['cache_name'] ); } } function del_cache( $folder = '' , $file = '' ){ global $cfg; $error = 'ok'; // Полное удаление каталога и кеш файла if( !@unlink($cfg['base_dir'].$folder."/".$file.$cfg['cache_name']) ){ $error = "no delete file cache" ; }elseif( !@rmdir($cfg['base_dir'].$folder) ){ $error = "no delete folder" ; } return $error; } // создадим тестовый кеш файл //set_cache( 'test_folder' , 'name_file_cache' , 'содержимое файлового кеша' ); // создание кеша //echo get_cache( 'test_folder' , 'name_file_cache' ); // чтение кеша //del_cache( 'test_folder' , 'name_file_cache' ); // Удаление ?> Для использования можно просто подключить его с помощью include. include "./cache.php" ; Примеры использования пользовательский функций PHP. Создание кеша и занесение в него данных set_cache( 'папка' , 'файл' , 'данные' ); Если кеш создан функция вернёт "ok", если нет то вернёт текст ошибки. Чтение кеша get_cache( 'папка' , 'файл' ); Если кеш найден функция вернёт данные из этого кеш файла, если нет то вернёт 0. Полное удаление кешированых данных set_cache( 'папка' , 'файл' , 'данные' ); Если кеш удалён функция вернёт "ok", если нет то вернёт текст ошибки. Внимание! При удалении функция удаляет папку и файл. Примеры использования кеширования на PHP. Кеширование данных из базы данных mysql. Кешировать данные разумно использовать на сильно нагруженных проектах. Для примера взял таблицу с курсом валют. Запроса в базу данных и вывод в браузер пользователю без кеширования выглядит так. <?php // Запрос в базу данных $result = @mysql_query( "SELECT * FROM currency" ); // Сбор данных в одну переменную $echo .= "<table><tr><td>Название</td><td>Сокр.</td></tr>\n" ; while( $value = @mysql_fetch_assoc( $result ) ) { $echo .= "<tr><td>{$value['name']}</td><td>{$value['code']}</td></tr>\n" ; } $echo .= "</table>" ; // Вывод информации в браузер echo $echo; ?> При этом один запрос уже сделан и если одновременно на сайте будут запрашивать информацию сразу 10 пользователей, то это значит что в базу попадает 10 запросов. Правильно ли это? Думаю что нет. Совершенно малость подправив код он начал кешировать данные из базы данных. Вот пример уже кешированого запроса к базе данных. <?php // Подключаем наш файл кеша для работы с функциями @include_once "./cache.php" ; // Проверяем есть ли кешированые данные $cache_date = get_cache( 'modules' , 'currency' ); // проверка условием. Если данных нет в кеше получаем данные из базе if($cache_date == "0"){ // Запрос в базу данных $result = @mysql_query( "SELECT * FROM currency" ); // Сбор данных в одну переменную $echo .= "<table><tr><td>Название</td><td>Сокр.</td></tr>\n" ; while( $value = @mysql_fetch_assoc( $result ) ) { $echo .= "<tr><td>{$value['name']}</td><td>{$value['code']}</td></tr>\n" ; } $echo .= "</table>" ; // Вывод информации в браузер echo $echo; // Заносим данные в кеш set_cache( 'modules' , 'currency' , $echo ); }else{ // Если кеш есть то получаем данные из него и выводим их echo get_cache( 'modules' , 'currency' ); } ?> Свои мысли и предложения отправляйте комментарии. Урок PHP "Оптимизация - кеширование на php" подготовлен сайтом Arts-UP.ru Раздел: Уроки PHP Дата: 18-01-2012, 20:20 | Добавил: WorldPad | Читали: 404 | Другие новости по теме:Комментарии:Оставить комментарий |
ОпросКак давно вы программируете на PHP? Поисковая статистика
Метки уроков.htaccess, class, denwer, error, file_get_contents, function, get_cache, Google, HTML, input, mysql, MySql PHP Apache, PHP, register_globals, return, SEO, str_replace(), template, Yandex, Отправка почты, Статья, браузер, будет, доступен, кеширование на php, комментарии, массив, поисковой, постраничная навигация, продвижение, работы, сайт, сервер, ссылки, статей, статьи, текст, текстов, функции, функция
Показать все теги |