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

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

WBOY
WBOYオリジナル
2016-07-21 15:53:01772ブラウズ

1. 使用する関連技術キーワード: PHP、Apache、
MOD_Rewrite (reWriteCond、REWRITERULE) アドレス書き換え、
OB シリーズ関数クッション
File_put_Contents で HTML を生成

2、処理: ユーザーがリクエスト URL = x を送信、判定?記事が存在するかどうか (1) 存在する場合は、該当する HTML ページに直接移動します。経由 (2) PHP を通じてデータベースのデータを読み取り、HTML ファイルを生成し、指定されたディレクトリに保存します。

3. 実装方法:
(1) アドレス書き換えは、Apahce の mod_rewrite モジュールの RewriteRule 命令を使用して書き換えを実装します (mod_rewrite の開始と簡単なルールについては、このブログの別の記事を参照してください http://hi.baidu.com/アレックス %5Fwang5 ... 0346ffb3fb952e.html )。文 (2) Apahce の MOD_REWRITE モジュールの REWRITECOND 命令で記事が存在するかどうかを判断します
(3) HTML ファイルを生成します:
OB_STAR () バッファを開き、記事の pHP を含めて、 File_Put_Contents で取得したバッファの内容を指定した 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]

news.php へのアクセスは、2 番目の文 RewriteRule ^index.html によって localhost/Test/index.html を通じて実装されます。 $ Test /news.php [L]

news.php =============================> を実装します。リスト記事タイトルリンク。



コードをコピーします

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

$ sql = "`id` 順に `arc` から `id `,`title` を選択します。
$rs = mysql_query($sql)){
echo "< ;a href='/ Test/html/news_$row[id].html'>$row[title]
";
}
?>


例: < ;a href='/ Test/html/news_3.html'>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"; = $root."/Test/html/".$filename;
include($root."/Test/newsDetail.php");
ob_end_flush( );
?>


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") ;
終了();
mysql_connect("ローカルホスト","ルート");
mysql_select_db("テスト"); '];

$ sql = "`id`=$id の場合、`ニュース` を選択します。
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 にリダイレクトする必要があるため、news_3.html を書き換えるための別のリクエストが作成されます。 to getnews.php?id =3 これにより、無限ループが形成されます。したがって、ファイルの存在判定は RewriteCond に引き継がれ、指定された html ファイルが存在しない場合にのみ書き換えルールが有効になります。このようにして、循環リダイレクトの問題は解消されます。
最初に fopen を使用して newsDetail.php を開き、生成されたコンテンツを HTML ファイルに fwrite し、次に include を使用して静的ページを出力しませんでした。その後、fhjr999 のリマインダーにより、getnews.php に newDetail.php をインクルードし、生成されたコンテンツを ob シリーズ関数を通じてバッファーに入れてから、HTML ファイルを生成するように変更されました。 obの効率は前者の約20倍です。




http://www.bkjia.com/PHPjc/318838.html

www.bkjia.com

本当

http://www.bkjia.com/PHPjc/318838.html
技術記事

1. 使用される関連技術キーワード: PHP、Apache、mod_rewrite (RewriteCond、RewriteRule) アドレス書き換え、HTML を生成するための ob シリーズ関数のバッファー file_put_contents 2. プロセス: ユーザーが送信します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。