ホームページ > php教程 > php手册 > PHPの単純な静的ページ生成プロセス

PHPの単純な静的ページ生成プロセス

WBOY
リリース: 2016-06-13 12:29:36
オリジナル
1224 人が閲覧しました

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

Apache をリクエストするとnews_3.html が存在するかどうかを判定します。 .htaccess の 3 番目の文で実装されます。
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/".$filename
ob_start();
include($root."/Test/newsDetail.php") );
file_put_contents($file,ob_get_contents());


newsDetail.php ========= ==========> データベースからデータを読み取り、getnews.php によってキャプチャされたニュース コンテンツを生成します



コードをコピー コード以下のように:

header("Content-Type:text/html; charset=gbk");
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倍です。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート