ホームページ >バックエンド開発 >PHPチュートリアル >PHP で静的 Web ページを生成する方法
PHP で静的記事システムを生成する方法について多くの友人がさまざまな場所で投稿しているのを見かけました。私も以前そのようなシステムを構築したことがありますので、参考のためにいくつかの意見を共有したいと思います。 Band of Brothers PHP トレーニングでは、まずいくつかの基本概念を確認します。
1. PHP スクリプトと動的ページ。
PHPスクリプトは、埋め込みなどの方法でHTMLファイルと混合したり、クラスや関数のカプセル化などのテンプレートの形でユーザーリクエストを処理したりできるサーバーサイドスクリプトプログラムです。いずれにせよ、基本はこれです。クライアントが特定のページをリクエストします -----> WEB サーバーは、指定された対応するスクリプトを処理に導入します -----> スクリプトはサーバーにロードされます ----->サーバーによってスクリプトはブラウザによって解析され、HTML 言語形式が形成されます----> 解析された HTML ステートメントはパッケージの形式でブラウザに返されます。このことから、ページがブラウザに送信された後は PHP が存在せず、HTML ステートメントに変換および解析されたことがわかります。実際、クライアントのリクエストは動的ファイルであり、PHP はそれを対応するページに解析してブラウザに送り返します。このページの処理方法は「動的ページ」と呼ばれます。
2つ目、静的ページ。
静的ページとは、サーバー側に実際に存在し、HTMLとJS、CSS、その他のクライアント側スクリプトのみを含むページを指します。扱い方としては。クライアントは特定のページをリクエストします---> WEB サーバーは特定のページを確認してロードします---> WEB サーバーはそのページをパッケージの形式でブラウザに返します。このプロセスから、動的ページを比較して確認できます。動的ページは WEB サーバーの PHP パーサーで解析する必要があり、通常、HTML 言語情報パッケージを形成する前にデータベースに接続してデータベース アクセス操作を実行する必要がありますが、静的ページは解析したり接続したりする必要はありません。データベースに直接送信できるため、サーバーの負荷が大幅に軽減され、サーバーの負荷容量が向上し、ページを開く速度と Web サイト全体を開く速度が大幅に向上します。ただし、その欠点は、リクエストを動的に処理できないことと、ファイルが実際にサーバー上に存在する必要があることです。
3つ目、テンプレートとテンプレート分析。
テンプレートは、コンテンツのhtmlファイルがまだ入力されていないことを意味します。例:
temp.html
PHP処理:
templatetest.php
test Templet,
author:Matrix@Two_Max";
$fp = fopen ("temp.html","r") ;
$content = fread ($fp,filesize ("temp.html"));
$content = str_replace ("{ file }",$file,$content); title }",$title,$content);
echo $content;
?>
テンプレート解析処理とは、PHPスクリプトを解析して処理した結果をテンプレートに埋め込む処理です。通常はテンプレート クラスの助けを借ります。現在、より一般的なテンプレート解析クラスには、phplib、smarty、fastsmarty などが含まれます。テンプレート解析処理の原則は、通常は置換です。また、判定やループなどの処理をテンプレートファイルに入れて解析クラスで処理することに慣れているプログラマもいますが、その典型的な応用が単純にループ処理であるブロック概念です。 PHP スクリプトはループの数、ループの方法などを指定し、テンプレート解析クラスがこれらの操作を実装します。
さて、静的ページと動的ページの長所と短所を比較した後、PHP を使用して静的ファイルを生成する方法について話しましょう。
PHP による静的ページの生成とは、PHP の動的解析と HTML ページの出力を指すのではなく、PHP を使用して HTML ページを作成することを指します。同時に、HTML は書き込み不可能な性質があるため、作成した HTML が変更された場合は、削除して再生成する必要があります。 (もちろん、通常のルールを使用して変更することもできますが、個人的には、削除して再生成するよりも速いと思います。メリットはありません。)
本題に戻ります。 PHP のファイル操作関数を使用したことのある PHP ファンは、PHP にファイルを開くファイル操作関数 fopen があることを知っています。ファイルが存在しない場合は、作成してみてください。これは、PHP を使用して HTML ファイルを作成できる理論的基礎です。 HTML ファイルの保存に使用されるフォルダーに書き込み権限 (つまり、権限定義 0777) がある限り、ファイルを作成できます。 (UNIX システムの場合、Win システムは考慮する必要はありません。) 上記の例を例として、最後の文を変更して、test ディレクトリに test.html という名前の静的ファイルを生成するように指定すると、
php
$title = "http://siyizhu.com テスト テンプレート";
$file = "TwoMax Inter テスト テンプルト,
author:Matrix@Two_Max"
$fp = fopen ("temp.html"; "r" );
$content = fread ($fp,filesize ("temp.html"))
$content = str_replace ("{file}",$file,$content);$content = str_replace ("{title}",$title,$content);
// echo $content;
$filename = "test/test.html"
$handle = fopen ($filename,"; w"); //ファイルポインタを開いてファイルを作成します
/*
ファイルが作成され書き込み可能か確認します
*/
if (!is_writable ($filename)){
die ("File :" .$filename."書き込み可能ではありません。プロパティを確認して再試行してください!");
}
if (!fwrite ($handle,$content)){ //ファイルに情報を書き込みます
die ( "Generate File ".$filename."Failed!");
fclose ($handle) //ポインタを閉じる
die ("Create file".$filename."Success!"); >
実際のアプリケーションでよくある問題の解決策の参考:
1. 記事リストの問題:
ファイルが生成されるたびに、ファイル名を記録します。データベース内の推奨記事については、静的ファイルが保存されている指定されたフォルダー内のページをポイントするだけです。 PHP 操作を使用して記事リストを処理し、文字列として保存し、ページの生成時にこの文字列を置き換えます。たとえば、ページ上の記事リストが配置されるテーブルと PHP 処理ファイルにマーク {articletable} を追加します:
$title = "http://siyizhu.com テスト テンプレート";
$file = "TwoMax Inter test Templet,
作者:Matrix@Two_Max";
$fp = fopen ("temp.html","r");
$content = fread ($fp,filesize) ("temp.html" ));
$content = str_replace ("{file}",$file,$content);
$content = str_replace ("{title}",$title,$content);
// リストの生成を開始します
$list = '';
$sql = "記事から id,title,filename を選択";
$query = mysql_query ($sql)
while ( $query)){
$list .= ''.$result['title'].'
';
}
$content .= str_replace ("{articletable}",$list,$content);
// リストを生成 End
// echo $content;
$filename = "test/test.html"
$handle = fopen ($filename,"w");そしてファイルを作成します
/*
ファイルが作成され、書き込み可能かどうかを確認します
; //ポインタを閉じます
die ("Create file".$filename."Success!");
?>
2番目に、ページングの問題。
ページネーションを指定すると、1ページあたり20記事になります。データベース クエリによると、特定のサブチャネル リストには 45 個の記事があります。まず、クエリを通じて次のパラメータを取得します。1、ページの総数、2、ページごとの記事数。 2 番目のステップ、for ($i = 0; $i
$fp = fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
$onepage = '20'; = "チャネル='$channelid'の記事からIDを選択";
$query = mysql_query ($sql)
$allpages = ceil ($num / $onepage); ;
for ($i = 0;$i<$allpages; $i++){
if ($i == 0){
$indexpath = "index.html"
} else {
$ indexpath = "index_".$i."html";
$start = $i * $onepage
$list = '';
$sql_for_page = "記事から名前、ファイル名、タイトルを選択しますchannel=' $channelid' limit $start,$onepage";
$query_for_page = mysql_query ($sql_for_page);
while ($result = $query_for_page){
$list .= ''.$title.'
'
}
$content = str_replace ("{articletable}",$list,$content); if (is_file ($indexpath)){
@unlink ($indexpath); // ファイルが既に存在する場合は削除します
}
$handle = fopen ($indexpath,"w"); // file pointer , create file
/*
ファイルが作成され、書き込み可能かどうかを確認する
*/
if (!is_writable ($indexpath)){
echo "ファイル: ".$indexpath." は書き込み可能ではありません, 属性にチェックを入れて、もう一度試してください!"; //echo に変更します
}
if (!fwrite ($handle,$content)){ //ファイルに情報を書き込みます
echo "Generate file".$ Indexpath." 失敗しました!"; //エコーするように変更します
}
fclose ($handle); //ポインタを閉じる
}
fclose ($fp)
die ("ページングファイルの生成が完了しました。生成が不完全な場合は、ファイルのパーミッション システムを確認して再生成してください!");
?>
大まかな考え方はこれです。その他のデータ生成、データ入出力チェック、ページネーション コンテンツ ポインティングなどを追加できます。必要に応じてページに移動します。
実際の記事システムの処理プロセスでは、www.lampbrother.net と動的ページの間には注意すべき多くの違いがあり、考慮すべき問題がまだ多くあります。しかし、一般的な考え方はこれであり、他の側面も類推して導き出すことができます。