1. 使用される関連技術キーワード: PHP、Apache、
Ob シリーズ関数バッファ
ユーザーは、記事が存在するかどうかを確認するために url?id=x リクエストを送信します
(1) 存在する場合は、直接アクセスします。対応する HTML ページ。
(2) PHP を介してデータベース データを読み取ることはなく、HTML ファイルを生成し、指定されたディレクトリに保存します。
3. 実装方法:
(1) アドレス書き換えは、Apahce の mod_rewrite モジュールの RewriteRule 命令を使用して書き換えを実装します (mod_rewrite の有効化と簡単なルールについては、このブログの別の記事を参照してください http://こんにちは。baidu.com/alex_wang5...0346ffb3fb952e.html)。
(2) 記事が存在するかどうかを確認します。Apahce の mod_rewrite モジュールの RewriteCond 命令を使用します。
(3) HTML ファイルを生成します。
取得したバッファーの内容を指定された HTMl ファイルに書き込みます。
4. コード内の .htaccess ファイルの内容
/Test ディレクトリ:
RewriteEngine On
RewriteRule ^index.html$ /news.php [L ]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^html/news_([0-9] ).html$ getnews.php?id=$1 [L]
ニュースへのアクセス。 php 2 番目の文 RewriteRule ^index.html$ Test/news.php [L] は localhost/Test/index.html
news.php ============ を通じて実装されます=================> news.php には記事タイトルのリンクがリストされます。
コードをコピー
コードは次のとおりです:header("Content-Type: text /html; charset=gbk"); //文字化けを防ぐため
mysql_connect("localhost","root","");
mysql_query('SET NAMES gbk'); //使用される gbk エンコーディング私のデータベースによるので、実際の状況に応じて調整してください
mysql_select_db("test");
$sql = "Select `id`,`title` FROM `arc` order by `id` DESC" ;
$rs = mysql_query($sql);
while($row = mysql_fetch_array($rs) ){
echo "
";
}
?>
例: php 静的ページ実装
リンクをクリックして http://localhost/Test/html/news_3.html
コードは次のとおりです: コードをコピー コード以下のように:
$id =$_GET['id'];
$root =& $_SERVER['DOCUMENT_ROOT'];
$filename = "news_".$ id.".html";
$file = $root."/Test/html/".$filename
ob_start();
include($root."/Test/newsDetail.php") );
file_put_contents($file,ob_get_contents());
newsDetail.php ========= ==========> データベースからデータを読み取り、getnews.php によってキャプチャされたニュース コンテンツを生成します
if( isset($_GET['id'] ) ){
$id = & $_GET['id'];
}else{
header("場所: http://127.0.0.1/lean/Test/html/news_failed.html" ) ;
exit();
}
mysql_connect("localhost","root","");
mysql_select_db("テスト") ) ;
$id =$_GET['id'];
$sql = "`id`=$id の場合、`news` を選択します。 ( $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 ファイルが存在しない場合にのみ書き換えルールが有効になります。このようにして、循環リダイレクトの問題は解消されます。
最初に newsDetail.php を開くために fopen を使用しませんでした。次に、生成されたコンテンツを HTML ファイルに fwrite し、次に静的ページを出力するために include しました。その後、fhjr999 のリマインダーにより、getnews.php に newDetail.php をインクルードし、生成されたコンテンツを ob シリーズ関数を通じてバッファーに入れてから、HTML ファイルを生成するように変更されました。 obの効率は前者の約20倍です。