ホームページ > バックエンド開発 > PHPチュートリアル > 簡単な静的ページ生成プロセス_PHP チュートリアル

簡単な静的ページ生成プロセス_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:59:15
オリジナル
1023 人が閲覧しました

私は常に Smarty キャッシュを使用してきましたが、快適に過ごすにはまだ自分でキャッシュを作成する必要があると感じています。インターネット上には比較的完成度の高い機能を持った素晴らしい人がたくさんいますので、まずは簡単なものを自分で作って、徐々に拡張していきたいと考えています。過去 2 日間で比較的単純なものを作成し、hi.baidu.net/alex_wang58 に記録しました。

1. 使用される関連技術キーワード: PHP、Apache、
Mod_rewrite (RewriteCond、RewriteRule) アドレス書き換え、
Ob シリーズ関数バッファ file_put_contents は HTML を生成します

2. プロセス: ユーザーは、記事が存在するかどうかを確認するためにリクエスト url?id=x を送信します

(1) 存在する場合は、対応する HTML ページに直接移動します。
(2) php でデータベースのデータを読み込んで html ファイルを生成し、指定したディレクトリに保存する必要がありません。

3.実装方法:

(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へのアクセスはlocalhost/Test/index.htmlを通じて実装され、2番目の文RewriteRule ^index.html$ Test/news.php [L]によって実装されます

news.php =============================> news.php には記事タイトルのリンクがリストされます。

header("Content-Type:text/html; charset=gbk"); //文字化けを防ぐため
mysql_connect("localhost","root","");
mysql_query('SET NAMES gbk'); //データベースで使用されている gbk エンコーディングです。実際の状況に応じて調整してください
mysql_select_db("テスト");

$sql = "SELECT `id`,`title` FROM `arc` order by `id` DESC";

$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
実装:

RewriteCond は「指示された書き換えの発生条件」です。 REQUEST_FILENAME このパラメータは「クライアントが要求したファイル名」です

'-s' (空ではない通常のファイル [サイズ]) は、指定されたファイルが存在し、サイズが 0 より大きい通常のファイルであるかどうかをテストします。一致条件の反転を表します。
つまり、RewriteCond という文は、要求されたリンクが存在しない場合、次の RewriteRule ルールが実行されることを意味します。

そのため、要求された news_3.html が存在しない場合、getnews.php?id=3 で処理されるようにアドレスが書き換えられます (そうでない場合、news_3.html が存在する場合は、HTML ファイルが直接読み込まれます)。

getnews.php ===================>機能: パラメータ送信の整合性を判断し、対応するファイルを呼び出して HTML ファイルを生成します。

$id =$_GET['id'];
$root =& $_SERVER['DOCUMENT_ROOT'];
$filename = "news_".$id.".html";
$file = $root."/Test/html/".$ファイル名;
ob_start();
include($root."/Test/newsDetail.php");
file_put_contents($file,ob_get_contents());
ob_end_flush(); ?>


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倍です。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/631909.html技術記事私はずっと Smarty のキャッシュを使ってきましたが、快適に過ごすにはやはり自分でキャッシュを作成する必要があると感じています。インターネット上には比較的完成度の高い機能を持った素晴らしい人がたくさんいますので、まずは簡単なものを自分で作って、徐々に拡張していきたいと考えています。この二日間で作りました...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート