Кэширование вывода HTML с помощью PHP

Я хотел бы создать кеш для моих php-страниц на моем сайте. Я нашел слишком много решений, но мне нужен скрипт, который может генерировать HTML-страницу из моей базы данных, например:

У меня есть страница для категорий, которая захватывает все категории из БД, поэтому скрипт должен иметь возможность генерировать HTML-страницу такого рода: my-Categories.html. затем, если я выберу категорию, я должен получить страницу my-x-category.html и т. д. и т. д. для других категорий и подкатегорий.

Я вижу, что некоторые веб-сайты имеют такие URL-адреса, как: wwww.the-web-site.com/the-page-ex.html

даже если они динамические.

Большое спасибо за помощь

10.12.2008 11:58:39
Я думаю, что ваш вопрос нуждается в уточнении: вы ищете, чтобы создать кеш в памяти обычно используемых ресурсов из базы данных, или вы ищете, как динамически создавать страницы из информации в базе данных?
Tom 10.12.2008 12:14:26
8 ОТВЕТОВ

Я использую APC для всего моего кэширования PHP (на сервере Apache)

2
10.12.2008 12:08:55

проверьте функцию ob_start ()

ob_start();
echo 'some_output';
$content = ob_get_contents();
ob_end_clean();

echo 'Content generated :'.$content;
9
10.12.2008 12:10:21

Вы можете получить такие URL-адреса, используя переписывание URL-адресов. Например: для Apache см. Mod_rewrite

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

Вам на самом деле не нужно создавать файлы. Вы можете создавать файлы, но это более сложно, так как вам нужно решить, когда обновить их, если данные изменятся.

5
10.12.2008 12:18:44
Но в зависимости от того, насколько крут ваш хост или нет, вы можете иметь или не иметь доступ к перезаписи URL ... Я знаю, что с моим пакетом 1 & 1 для начинающих я этого не делаю :(
Adam Rezich 10.12.2008 16:59:44
Очень старый пост здесь, но я хочу исправить ситуацию. Пакеты 1 & 1 Beginner позволяют использовать mod_rewrite - по крайней мере, с 2007 года, когда я впервые зарегистрировался с 1 & 1.
Alec Gorge 15.02.2012 01:31:24

Ручное кэширование (создание 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,'');
3
18.10.2018 18:57:52
Если вы используете setlocale в своем коде, это необходимо учитывать при создании имени файла кэша - в противном случае вы в конечном итоге будете использовать одну и ту же версию для всех локалей.
Codemonkey 15.10.2018 12:35:05

Если вы не против фреймворков, попробуйте использовать Zend_Cache Zend Frameworks . Он довольно гибкий и (в отличие от некоторых базовых модулей) прост в реализации.

0
10.12.2008 21:12:17

Можно использовать Cache_lite из PEAR:

Подробности здесь http://mahtonu.wordpress.com/2009/09/25/cache-php-output-for-high-traffic-websites-pear-cache_lite/

0
19.05.2010 15:47:51

Я думал с точки зрения нагрузки на базу данных и взимал плату за пропускную способность и скорость загрузки данных. У меня есть некоторые страницы, которые вряд ли изменятся за годы (я знаю, что легко использовать систему CMS на основе базы данных). В отличие от США, здесь стоимость полосы пропускания может быть высокой. У кого-то есть какие-либо взгляды на это, будь то создание htmal-страниц или динамических (php, asp.net). Ссылки на страницы в любом случае будут храниться в базе данных.

0
2.07.2014 04:37:10

На мой взгляд, это лучшее решение. Я использую это для кэширования файла 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";
?>
0
20.04.2018 10:17:23
Если вы используете setlocale в своем коде, это необходимо учитывать при создании имени файла кэша - в противном случае вы в конечном итоге будете использовать одну и ту же версию для всех локалей.
Codemonkey 15.10.2018 12:34:54