Постоянно кэшируйте динамические форумы PHP / MySQL как статические страницы - PullRequest
2 голосов
/ 30 марта 2009

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

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 30 марта 2009

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

1 голос
/ 30 марта 2009

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

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

ob_start();

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

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

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

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

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

0 голосов
/ 30 марта 2009

Что сказал 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 ');
        }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...