2

私はかつて、オンラインデスマッチプレーヤーの小グループのために自家製のフォーラムシステムを運営していました。これらのフォーラムは長い間閉鎖されており、現在オフラインになっています。私がやりたいのは、以前のユーザーが検索できるオンラインアーカイブを作成するために、システム全体のすべてのデータを含む静的HTMLファイルを作成することです。

私はすべての元のデータを管理できます。これには次のものが含まれます。

  • 画像
  • プロファイル
  • フォーラムスレッド
  • データベース
  • PHPスクリプト

基本的に、私はデータベースを方程式から外して、データベースを存続させるためにリソースを浪費する必要がないようにしたいのです。(また、これは自家製のフォーラムソリューションであったため、あまり最適化されていないと確信しています)

これは実現可能な目標ですか、それともフォーラムを現状のままにして、オーバーヘッドについて心配する必要はありませんか?

可能である(そしてリモートで実行可能である)場合、どのように進めるかについていくつかの提案を得ることができますか?

4

3 に答える 3

4

wgetはウェブサイトのHTMLミラーを作成できます。--mirrorの使用法についてはドキュメントを参照してください。

于 2009-03-30T01:53:47.267 に答える
1

出力バッファリングを使用して、すべての出力をキャプチャし、ブラウザに出力するのではなく、ファイルに書き込みます。

コードを編集して、上部(ブラウザーへのHTML出力の前)に次の行が表示されるようにします。

ob_start();

スクリプトの最後に、次を追加します。

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

重複しないように、いくつかの命名スキームを考え出す必要があります。

次に、正規表現を使用して、apache RewriteRulesを使用して、すべてのリクエストを新しいHTMLページにリダイレクトし、リンクが壊れないようにします。

すべてのページを取得するには、ページ数が少ない場合は各ページを1つずつクリックするか、すべてのURLを手動で配列に書き込んでからループするか、自分でサイトをクロールすることもできます。ページ上のすべてのURLを検索し、移動しながらそれらをキューに追加します。

于 2009-03-30T02:05:52.450 に答える
0

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 ');
        }

}
于 2009-03-30T02:00:48.793 に答える