20

私が持っている特定のプロジェクトでは、サーバー側のコードは許可されていません。PHP で (インクルード、条件などを使用して) Web サイトを作成し、それをクライアントに提供できる静的な html サイトに変換するにはどうすればよいですか?

更新: wget を提案してくれたすべての人に感謝します。それが私が使ったものです。PC を使用していることを指定する必要があったので、ここから Windows バージョンを取得しました: http://gnuwin32.sourceforge.net/packages/wget.htm

4

10 に答える 10

44

Linuxシステムを利用できる場合は、wgetを使用してください。

wget -k -K  -E -r -l 10 -p -N -F -nH http://website.com/

オプション

  • -k:リンクを相対に変換します
  • -K:wgetによる変換なしでファイルの元のバージョンを保持します
  • -E:htmlファイルの名前を.htmlに変更します(まだhtm(l)拡張子が付いていない場合)
  • -r:再帰的…もちろん再帰的コピーを作成したい
  • -l 10:再帰の最大レベル。あなたが本当に大きなウェブサイトを持っているなら、あなたはより大きな数を置く必要があるかもしれません、しかし10レベルは十分であるはずです。
  • -p:各ページに必要なすべてのファイル(css、js、画像)をダウンロードします
  • -N:タイムスタンプをオンにします。
  • -F:入力がファイルから読み取られるとき、それをHTMLファイルとして扱われるように強制します。
  • -nH:デフォルトでは、wgetはサイトのホスト名にちなんで名付けられたディレクトリにファイルを置きます。これにより、これらのホスト名ディレクトリの作成が無効になり、すべてが現在のディレクトリに配置されます。

出典:Jean-PascalHoudeのウェブログ

于 2008-09-15T20:34:31.433 に答える
4

サイトを構築し、 wgetlwp-mirrorなどのミラーリング ツールを使用して静的コピーを取得します

于 2008-09-15T20:29:58.340 に答える
3

私は過去に以下を追加してこれを行いました:

ob_start();

ページの上部とフッターで:

$page_html = ob_get_contents();
ob_end_clean();
file_put_contents($path_where_to_save_files . $_SERVER['PHP_SELF'], $page_html);

HTML をファイルに焼き付ける前に、拡張子 .php を .html に変換することをお勧めします。変数を使用して複数のページを生成する必要がある場合、非常に簡単なオプションの 1 つは、ファイル名にすべての GET 変数の md5sum を追加することです。HTML でそれらを変更するだけです。したがって、次のように変換できます。

somepage.php?var1=hello&var2=hullo

somepage_e7537aacdbba8ad3ff309b3de1da69e1.html

醜いが動作します。

PHP を使用して javascript を生成し、一部の機能をエミュレートできる場合もありますが、これは簡単には自動化できません。

于 2008-09-15T20:39:22.407 に答える
1

または、(Win | Web)HTTrack(Webサイト)を使用して静的ページを取得することもできます。HTTrackは、静的出力に一致するようにファイルやドキュメントへのリンクも修正します。

于 2008-09-15T22:52:04.647 に答える
1

あらゆる種類のリクエスト変数などを含む多数のページがある場合、おそらく他のコメンターが言及したスパイダー ツールの 1 つ (wget、lwp-mirror など) が最も簡単で堅牢なソリューションです。

ただし、取得する必要があるページの数が少ない場合、または少なくとも管理可能な場合は、サードパーティのツールを必要としないオプションがいくつかあります (サードパーティだからといって割引する必要はありません)。

  1. コマンドラインで php を使用して、ファイルに直接出力することができます。

    php myFile.php > myFile.html

    この方法を使用すると面倒になる可能性があり (すべてをシェル スクリプトに入れることはできますが)、同じ方法で変数を渡すことはできません (例:機能しphp myFile.php?abc=1ません)。

  2. file_get_contents()別の PHP ファイルを「ビルド」スクリプトとして使用できます。このスクリプトには、必要なすべての URL のリストが含まれており、またはを介し​​てそれらを取得しfile()、ローカル ファイルに書き込みます。このメソッドを使用すると、ファイルが変更されたかどうかを確認することもできます (md5_file()そのために機能するはずです)。そのため、更新のみが必要な場合にクライアントに何を提供すればよいかがわかります。

  3. #2に加えて、出力をファイルに書き込む前に、ローカルURLをスキャンしてから、ダウンロードするファイルのリストに追加します。そこにいる間に、これらの URL を変更して、最終的に出力に名前を付けるものにリンクし、最後に機能する Web を作成します。ここで注意してください - これが良さそうなら、すでに存在するツールの 1 つを使用して、これを行うことができます。

于 2008-09-15T20:48:45.970 に答える
1

これを行う 1 つの方法は、通常どおり PHP でサイトを作成し、スクリプトで実際に Web ページを取得して (HTTP を介して - wget を使用するか、URL で file() を使用するだけの別の php スクリプトを作成できます)、それらをあなたが「終わった」ときの公開ウェブサイトの場所。その後、ページを再度変更する場合は、スクリプトを再度実行するだけです。この方法は、データベースの変化が遅く、トラフィックが多い場合に非常に便利です。ライブ サイトですべての SQL クエリを排除できるからです。

于 2008-09-15T20:31:25.390 に答える
1

modx を使用する場合、静的ファイルをエクスポートする機能が組み込まれています。

于 2008-09-15T20:42:19.373 に答える
1

通常どおりサイトを作成し、スパイダー ソフトウェアを使用して HTML コピーを生成します。

HTTrackは私が以前に使用したソフトウェアです。

于 2008-09-15T20:29:55.313 に答える
0

私は自分のWebサイトで、変更されないことが保証されている特定のページに対してこれを実行します-ボイルできるシェルスクリプトを実行するだけです(警告:bash擬似コード):

find site_folder -name \*.static.php -print -exec Staticize {} \;

Staticizeは次のようになります。

# This replaces .static.php with .html
TARGET_NAME="`dirname "$1"`/"`basename "$1" .static.php`".html
php "$1" > "$TARGET_NAME"
于 2008-09-15T20:32:28.867 に答える
0

wget はおそらく最も完全な方法です。それにアクセスできず、テンプレート ベースのレイアウトを使用している場合は、Savant 3 の使用を検討することをお勧めします。Smarty などの他のテンプレート システムよりも Savant 3 を強くお勧めします。

Savant は非常に軽量で、独自のサブ言語ではなく、テンプレート言語として PHP を使用します。検索するコマンドは fetch() です。これは、テンプレートを「コンパイル」し、出力可能な変数に配置します。

http://www.phpsavant.com/

于 2008-09-15T21:01:51.697 に答える