ホームページ >バックエンド開発 >PHPチュートリアル >簡単な静的ページ生成プロセス_PHP チュートリアル
私は常に Smarty キャッシュを使用してきましたが、快適に過ごすにはまだ自分でキャッシュを作成する必要があると感じています。インターネット上には比較的完成度の高い機能を持った素晴らしい人がたくさんいますので、まずは簡単なものを自分で作って、徐々に拡張していきたいと考えています。過去 2 日間で比較的単純なものを作成し、hi.baidu.net/alex_wang58 に記録しました。
1. 使用される関連技術キーワード: PHP、Apache、
Mod_rewrite (RewriteCond、RewriteRule) アドレス書き換え、
Ob シリーズ関数バッファ
file_put_contents は HTML を生成します
(1) 存在する場合は、対応する HTML ページに直接移動します。
(2) php でデータベースのデータを読み込んで html ファイルを生成し、指定したディレクトリに保存する必要がありません。
(1) アドレス書き換えでは、Apahce の mod_rewrite モジュールの RewriteRule 命令を使用して書き換えを実装します (mod_rewrite の開始と簡単なルールについては、このブログの別の記事 http://hi.baidu.com/alex%5Fwang5... 0346ffb3fb952e を参照してください)。 html)。
(2) 記事が存在するかどうかを確認するには、Apahce の mod_rewrite モジュールの RewriteCond コマンドを使用します
(3) HTML ファイルを生成:
ob_star() はバッファーを開き、記事を読み取る PHP を組み込み、次に file_put_contents を使用して取得したバッファーの内容を指定された HTMl ファイルに書き込みます。
4. コード
/Test ディレクトリ内の .htaccess ファイルの内容:
RewriteRule ^index.html$ /news.php [L]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^html/news_([0-9]+).html$ getnews.php?id=$1 [L]
news.php =============================> news.php には記事タイトルのリンクがリストされます。
header("Content-Type:text/html; charset=gbk"); //文字化けを防ぐため
$rs = mysql_query($sql);
while($row = mysql_fetch_array($rs) ){
echo "$row[title]
";
}
?>
例: php 静的ページ実装
が生成されます
リンクをクリックして http://localhost/Test/html/news_3.html にリクエストを行ったとき
Apache は、.htaccess の 3 番目の文に基づいて、news_3.html が存在するかどうかを判断します
RewriteCond %{REQUEST_FILENAME} !-s
実装:
'-s' (空ではない通常のファイル [サイズ]) は、指定されたファイルが存在し、サイズが 0 より大きい通常のファイルであるかどうかをテストします。一致条件の反転を表します。
つまり、RewriteCond という文は、要求されたリンクが存在しない場合、次の RewriteRule ルールが実行されることを意味します。
getnews.php ===================>機能: パラメータ送信の整合性を判断し、対応するファイルを呼び出して HTML ファイルを生成します。
$id =$_GET['id'];
newsDetail.php ====================> データベースからデータを読み取り、getnews.php によってキャプチャされるニュース コンテンツを生成します
header("Content-Type:text/html; charset=gbk");
if( isset($_GET['id']) ){
$id = & $_GET['id'];
}その他{
header("場所: [url]http://127.0.0.1/lean/Test/html/news_failed.html[/url]");
exit();
}
mysql_connect("localhost","root","");
mysql_query('SET NAMES gbk');
mysql_select_db("テスト");
$id =$_GET['id'];
$sql = "SELECT `news` FROM `arc` WHERE `id`=$id";
$rs = mysql_query($sql);
while($row = mysql_fetch_array($rs) ){
echo $row['news'];
}
?>
これにより、news_article ID.html という名前の HTML ファイルが /Test/html ディレクトリに生成されます。
追記: 最初は、対応する HTML ページが存在するかどうかを判断するときに、Apache の RewriteCond の代わりに PHP の組み込み file_exists() 判断が使用されます。つまり、RewriteCond %{REQUEST_FILENAME} !-s はありません。実現可能に思えますが、その結果、「循環リダイレクト」問題が発生します。
news_3.html が存在しない場合は、getnews.php を使用して news_3.html を生成する必要があります。生成が完了したら、news_3.html にリダイレクトする必要があるため、別のリクエスト mod_rewrite が開始されて、news_3.html が getnews に書き換えられます。 php?id= 3 これにより、無限ループが作成されます。したがって、ファイルの存在判定は RewriteCond に引き継がれ、指定された html ファイルが存在しない場合にのみ書き換えルールが有効になります。このようにして、循環リダイレクトの問題は解消されます。
fopen の out は、newsDetail.php を開き、生成されたコンテンツを HTML ファイルに fwrite し、静的ページを出力するために include するためには使用されません。その後、fhjr999 のリマインダーにより、getnews.php に newDetail.php をインクルードし、生成されたコンテンツを ob シリーズ関数を通じてバッファーに入れてから、HTML ファイルを生成するように変更されました。 obの効率は前者の約20倍です。