まず、いくつかの基本概念を確認してみましょう。
1. PHP スクリプトと動的ページ。
PHP スクリプトは、埋め込みなどの方法で HTML ファイルと混合したり、クラスや関数のカプセル化などの形式のテンプレートの形式でユーザーのリクエストを処理したりできる、サーバー側のスクリプト プログラムです。いずれにせよ、基本はこれです。クライアントが特定のページをリクエストします -----> WEB サーバーは、指定された対応するスクリプトを処理に導入します -----> スクリプトはサーバーにロードされます ----->サーバーによってスクリプトはブラウザによって解析され、HTML 言語形式が形成されます----> 解析された HTML ステートメントはパッケージの形式でブラウザに返されます。このことから、ページがブラウザに送信された後は PHP が存在せず、HTML ステートメントに変換および解析されたことがわかります。実際、クライアントのリクエストは動的ファイルであり、PHP はそれを対応するページに解析してブラウザに送り返します。このページの処理方法は「動的ページ」と呼ばれます。
2番目、静的ページ。
静的ページとは、サーバー側に実際に存在し、HTML と JS、CSS、その他のクライアント側スクリプトのみを含むページを指します。扱い方としては。クライアントは特定のページをリクエストします---> WEB サーバーは特定のページを確認してロードします---> WEB サーバーはそのページをパッケージの形式でブラウザに返します。このプロセスから、動的ページを比較して確認できます。動的ページは WEB サーバーの PHP パーサーで解析する必要があり、通常、HTML 言語情報パッケージを形成する前にデータベースに接続してデータベース アクセス操作を実行する必要がありますが、静的ページは解析したり接続したりする必要はありません。データベースに直接送信できるため、サーバーの負荷が大幅に軽減され、サーバーの負荷容量が向上し、ページを開く速度と Web サイト全体を開く速度が大幅に向上します。ただし、その欠点は、リクエストを動的に処理できないことと、ファイルが実際にサーバー上に存在する必要があることです。
3つ目、テンプレートとテンプレート分析。
テンプレートは、コンテンツのhtmlファイルがまだ入力されていないことを意味します。例:
temp.html
{ title } これは { file } ファイルのテンプレートです
;
PHP 処理:
templetest.php
$title = "TwoMax インターナショナル テスト テンプレート";
$file = "TwoMax インター テスト テンプレート、
作者: Matrix@Two_Max"; fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
$content .= str_replace ("{ file }",$file,$content) ; コンテンツ) をテンプレート処理プロセスに組み込みます。通常はテンプレート クラスの助けを借ります。現在、より一般的なテンプレート解析クラスには、phplib、smarty、fastsmarty などが含まれます。テンプレート解析処理の原則は、通常は置換です。また、判定やループなどの処理をテンプレートファイルに入れて解析クラスで処理することに慣れているプログラマもいますが、その典型的な応用が単純にループ処理であるブロック概念です。 PHP スクリプトはループの数、ループの方法などを指定し、テンプレート解析クラスがこれらの操作を実装します。
それでは、静的ページと動的ページの長所と短所を比較した後、PHP を使用して静的ファイルを生成する方法について説明します。
PHP による静的ページの生成とは、PHP の動的解析と HTML ページの出力を指すのではなく、PHP を使用して HTML ページを作成することを指します。同時に、HTML は書き込み不可能な性質があるため、作成した HTML が変更された場合は、削除して再生成する必要があります。 (もちろん、通常のルールを使用して変更することもできますが、個人的には、削除して再生成するよりも高速であり、利益に見合っていないと思います。)
本題に戻ります。 PHP のファイル操作関数を使用したことのある PHP ファンは、PHP にファイルを開くファイル操作関数 fopen があることを知っています。ファイルが存在しない場合は、作成してみてください。これは、PHP を使用して HTML ファイルを作成できる理論的基礎です。 HTML ファイルの保存に使用されるフォルダーに書き込み権限 (つまり、権限定義 0777) がある限り、ファイルを作成できます。 (UNIX システムの場合、Win システムを考慮する必要はありません。) 上記の例を例として、最後の文を変更し、test.html という名前の静的ファイルをテスト ディレクトリに生成するように指定すると、次のようになります。
$title = "Tomax International Test Template"; file = "TwoMax インター テスト テンプレート、
作者: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 ("ファイル: ".$filename." は書き込み可能ではありません。プロパティを確認して再試行してください!");
}
if (!fwrite ($ handle,$content )){ //ファイルに情報を書き込みます
die ("Generate file".$filename."Failed!")
}
fclose ($handle) //ポインターを閉じます
die ("Create file".$filename ."Success!");
?>
実際のアプリケーションにおける一般的な問題の解決策が参照されています:
1. 記事リストの問題:
データベースにフィールドを作成し、ファイル名を記録します。ファイルが生成されると、ファイル名が自動的に生成され、データベースに保存されます。推奨記事については、静的ファイルが保存されている指定したフォルダー内のページをポイントするだけです。 PHP 操作を使用して記事リストを処理し、文字列として保存し、ページの生成時にこの文字列を置き換えます。たとえば、ページ上の記事リストが配置されるテーブルと PHP 処理ファイルにマーク {articletable } を追加します。
$title = "TwoMax International test template"
$file = "; TwoMax インター テスト テンプレート、
作成者: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、タイトル、ファイル名を選択";
$query = mysql_query ($sql);
$list .= '< ;a href=' .$root.$result['filename'].' target=_blank>'.$result['title'].'
';
}
$content 。 = str_replace ("{articletable }",$list,$content);
//リスト生成終了
//echo $content
$filename = "test/test.html"
$handle = fopen; ,"w"); // ファイル ポインターを開き、ファイルを作成します
/*
ファイルが作成され、書き込み可能かどうかを確認します
*/
if (!is_writable ($filename)){
die ("File: ". $filename." は書き込み可能ではありません。プロパティを確認して再試行してください。");
}
if (!fwrite ($handle,$content)){ //ファイルに情報を書き込みます
die ("Generate file". $ファイル名."失敗しました!
、1 ページあたり 20 個の記事。データベースにクエリを実行すると、あるサブチャネル リストの記事数は 45 になります。1、合計ページ数、2、1 つあたりの記事数。 2 番目のステップ、for ($i. = 0; $i
$fp = fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
$onepage = '20';
$sql = 「記事から ID を選択します。ここで、channel='$channelid'」;
$query = mysql_query ($sql);
$num = mysql_num_rows ($query);
$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"); //打开文件指针、创建文件
/*
检查文件は创建され、書き込み可能
*/
if (!is_writable ($indexpath)){
echo "文件:".$indexpath ."不可写、请检查そのプロパティの後重试!"; //修正はecho
}
if (!fwrite ($handle,$content)){ //将信息写入文件
echo " 生成文件".$indexpath."失败!"; //修正はecho
}
fclose ($handle); //关闭指针
}
fclose ($fp);
die ("生成分页文件完了,如生成不完全,请检查文件权限系统後再新生成!");
?>
大まかに考えると、他のデータの生成、データの入出力検出、コンテンツの方向付けなど、アクションシステムの処理中に考慮すべき問題が数多くあります。之处、しかし、大まかに考えると、別の側面から得られる可能性もあります。
以上介绍了http://www.56.com/m2v/?magic=1 PHP生成静态页面详解,http://www.56.com/m2v/?magic=1 側面の内容を含む,希望对PHP 教程には興味深い友人がいます。