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

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

Jun 13, 2016 pm 12:29 PM
apachemodphprewrite1つキーワードテクノロジー生成する関連している単純プロセス静的

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

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン