Я хочу создать кеш для своих php-страниц на моем сайте. Я нашел слишком много решений, но мне нужен скрипт, который может генерировать HTML-страницу из моей базы данных, например:
У меня есть страница для категорий, которая захватывает все категории из БД, поэтому скрипт должен иметь возможность генерировать HTML-страницу вида: my-category.html. тогда, если я выберу категорию, я должен получить страницу my-x-category.html и так далее, и так далее для других категорий и подкатегорий.
Я вижу, что на некоторых веб-сайтах есть URL-адреса, например: wwww.the-web-site.com/the-page-ex.html
хоть они и динамичны.
Большое спасибо за помощь






Я использую БТР для всего моего кеширования PHP (на сервере Apache)
проверьте функцию ob_start ()
ob_start();
echo 'some_output';
$content = ob_get_contents();
ob_end_clean();
echo 'Content generated :'.$content;
Вы можете получить такие URL-адреса с помощью перезаписи URL-адресов. Например: для apache см. Mod_rewrite
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
На самом деле вам не нужно создавать файлы. Вы можете создавать файлы, но это сложнее, поскольку вам нужно решить, когда их обновлять, если данные изменятся.
Но в зависимости от того, насколько хорош ваш хост или нет, у вас может быть или не быть доступа к перезаписи URL ... Я знаю, что с моим пакетом 1 & 1 Beginner у меня этого нет :(
Здесь очень старый пост, но я хочу внести ясность. Пакеты 1 и 1 для начинающих допускают использование mod_rewrite - по крайней мере, с 2007 года, когда я впервые зарегистрировался с 1 и 1.
Ручное кэширование (создание HTML и сохранение его в файл) может быть не самым эффективным способом, но если вы хотите пойти по этому пути, я рекомендую следующее (скопировано из простого тестового приложения, которое я написал для этого):
$cache_filename = basename($_SERVER['PHP_SELF']) . "?" . $_SERVER['QUERY_STRING'];
$cache_limit_in_mins = 60 * 32; // this forms 32hrs
// check if we have a cached file already
if ( file_exists($cache_filename) )
{
$secs_in_min = 60;
$diff_in_secs = (time() - ($secs_in_min * $cache_limit_in_mins)) - filemtime($cache_filename);
// check if the cached file is older than our limit
if ( $diff_in_secs < 0 )
{
// it isn't, so display it to the user and stop
print file_get_contents($cache_filename);
exit();
}
}
// create an array to hold your HTML output, this is where you generate your HTML
$output = array();
$output[] = '<table>';
$output[] = '<tr>';
// etc
// Save the output as manual cache
$file = fopen ( $cache_filename, 'w' );
fwrite ( $file, implode($output,'') );
fclose ( $file );
print implode($output,'');
Если вы используете setlocale в своем коде, это необходимо учитывать при создании имени файла кеша - иначе вы в конечном итоге будете обслуживать одну и ту же версию для всех локалей.
Если вы не против фреймворков, попробуйте использовать Zend Frameworks Zend_Cache. Он довольно гибкий и (в отличие от некоторых модулей фреймворка) прост в реализации.
Можно использовать Cache_lite из PEAR:
Подробности здесь http://mahtonu.wordpress.com/2009/09/25/cache-php-output-for-high-traffic-websites-pear-cache_lite/
Я думал с точки зрения нагрузки на базу данных и платы за пропускную способность данных и скорость загрузки. У меня есть некоторые страницы, которые вряд ли изменятся с годами (я знаю, что легко использовать систему CMS на основе базы данных). В отличие от США, здесь стоимость полосы пропускания может быть высокой. У кого-нибудь есть какие-либо взгляды на это, будь то создание htmal-страниц или динамических (php, asp.net) Ссылки на страницы в любом случае будут храниться в базе данных.
На мой взгляд, это лучшее решение. Я использую это для файла JSON кеша для своего Android-приложения. Его можно просто использовать в других файлах PHP. Оптимизирует размер файла с ~ 1 МБ до ~ 163 КБ (gzip).
cache в вашем каталогеcache_start.php и вставьте этот код<?php
header("HTTP/1.1 200 OK");
//header("Content-Type: application/json");
header("Content-Encoding: gzip");
$cache_filename = basename($_SERVER['PHP_SELF']) . "?" . $_SERVER['QUERY_STRING'];
$cache_filename = "./cache/".md5($cache_filename);
$cache_limit_in_mins = 60 * 60; // It's one hour
if (file_exists($cache_filename))
{
$secs_in_min = 60;
$diff_in_secs = (time() - ($secs_in_min * $cache_limit_in_mins)) - filemtime($cache_filename);
if ( $diff_in_secs < 0 )
{
print file_get_contents($cache_filename);
exit();
}
}
ob_start("ob_gzhandler");
?>
cache_end.php и вставьте этот код<?php
$content = ob_get_contents();
ob_end_clean();
$file = fopen ( $cache_filename, 'w' );
fwrite ( $file, $content );
fclose ( $file );
echo gzencode($content);
?>
index.php (файл, который вы хотите кэшировать)<?php
include "cache_start.php";
echo "Hello Compress Cache World!";
include "cache_end.php";
?>
Если вы используете setlocale в своем коде, это необходимо учитывать при создании имени файла кеша - иначе вы в конечном итоге будете обслуживать одну и ту же версию для всех локалей.
Я думаю, что ваш вопрос требует некоторого пояснения: вы хотите создать кеш в памяти для обычно используемых ресурсов из базы данных или вы ищете, как динамически создавать страницы из информации в базе данных?