Постоянное кэширование динамических форумов PHP/MySQL как статических страниц.

StackOverflow https://stackoverflow.com/questions/695768

Вопрос

Однажды я запустил самодельную форумную систему для небольшой группы онлайн-игроков в Deathmatch.Эти форумы уже давно закрыты и в настоящее время находятся в автономном режиме.Я хочу создать статические HTML-файлы, содержащие все данные для всей системы, чтобы иметь онлайн-архив, в котором бывшие пользователи могли бы осуществлять поиск.

Я контролирую все исходные данные.Это будет включать:

  • Изображений
  • Профили
  • Темы форума
  • База данных
  • PHP-скрипты

По сути, я хочу исключить базу данных из уравнения, чтобы мне не приходилось тратить ресурсы на ее поддержание.(а еще потому, что это было самодельное решение для форума, я уверен, что оно не очень оптимизировано)

Достижима ли это цель, или мне следует просто оставить форумы такими, какие они есть, и не беспокоиться о накладных расходах?

Если это возможно (и отдаленно осуществимо), могу ли я получить несколько советов о том, как действовать дальше?

Это было полезно?

Решение

wget может создать HTML-зеркало веб-сайта.Посмотрите в документации использование --mirror.

Другие советы

Используйте буферизацию вывода, чтобы захватить весь вывод и записать его в файл, а не в браузер.

Отредактируйте свой код так, чтобы вверху (перед выводом HTML в браузер) была такая строка:

ob_start();

в конце скрипта добавьте это:

$output = ob_get_clean();
file_put_contents("<<name of this page>>.html", $output);

Вам придется придумать какую-то схему именования, чтобы не было дубликатов.

Затем, используя регулярное выражение, используйте Apache RewriteRules, чтобы перенаправить все запросы на новую HTML-страницу, чтобы ваши ссылки не прерывались.

Чтобы получить все страницы, вы можете просто щелкнуть по каждой из них одну за другой, если у вас их немного, вы можете вручную записать все URL-адреса в массив и затем просмотреть их в цикле, или вы даже можете просканировать сайт самостоятельно. ищет все URL-адреса на странице и добавляет их в очередь по мере продвижения.

Что сказал ceejayoz Или вы можете добавить заголовки кэширования в начальную загрузку вашего приложения, кэш на столько лет, сколько вы считаете нужным.

Вы вызываете прикрепленную функцию с указанием количества часов, в течение которых вы хотите кэшировать страницу на стороне клиента. Обязательно вызывайте эту функцию после session_start, если она у вас есть, поскольку session_start генерирует заголовки, которые предотвращают кеширование.

function client_side_cache($hours)

{
        //in the event a session start is used, I have to clean all the #$%# headers it sends to prevent caching
        header('Cache-Control: ',true);
        header("Pragma: ", true);
        header("Expires: ", true);

        //get the If-Modified-Since header in a unix time format
        $headers = getallheaders();
        if (isset($headers['If-Modified-Since']))
        {
            $modifiedSince = explode(';', $headers['If-Modified-Since']);
            $modifiedSince = strtotime($modifiedSince[0]);
        }
        else
        {
            $modifiedSince = 0;
        }

        //calculate the Last-Modified timestamp
        $current_time=time();
        $last_modified=($current_time)/($hours*3600);
        $last_modified=(int)$last_modified;
        $last_modified=$last_modified*$hours*3600;

    //check cache not expires
        if ($last_modified <= $modifiedSince)
        {
            header('HTTP/1.1 304 Not Modified');
            exit();
        }

        else //emit a new Last-Modified (either cache expired or page wasn'r cached
        {
            Header('Last-Modified: '.gmdate("D, d M Y H:i:s",$last_modified).' GMT ');
        }

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top