まず原理について話しましょう。あるラクダがたくさんの情報を調べたところ、どの方法を使っても原理は同じであることがわかりました。プログラムを使用して、対応するデータを読み取り、テンプレート内の変数を置き換え、静的ページを生成します。 PHPで使用される主なものはfread()とfwirte()です。静的ページが生成された後は、変更の問題が発生します。ここでは、通常のマッチング方法を使用して、テンプレートの変更された部分を置き換えることができます。しかし、この方法は面倒すぎます。Tuotuo が推奨する方法は、最初に生成されたテンプレートを直接切り取って再生成することです。ははは、本当にできています。
説明する必要があるもう 1 つの点は、静的ページを生成するこの方法は、情報の最終ページなど、頻繁に変更されないページに一般的に使用されるということです。リスト ページの場合は、情報があまり頻繁に更新されない場合にも推奨されます。インターネット上には、静的ページを生成できる人気のブログやフォーラム プログラムが数多くありますが、それらはすべてバックグラウンドで [HTML ページの生成] ボタンを手動でクリックすることで HTML を「半自動的に」生成します。ただし、非常に大量の情報を含む一部のポータル Web サイトでは、これは機能しません。静的ページは自動的に変更できないため、「静的」と呼ばれます。情報リストが 1 日に 100 回更新される場合、静的リスト ページは 100 回再生成されます。こんなコラムが10本もあったら、考えただけで血を吐きそうになります。
それでは、早速、実際のプログラムのデモを見てみましょう:
最初: ob 関数を使用して作成されており、コードは比較的単純で効率が比較的高いです。あるラクダはある
から来たソース コードは専門家から入手し、いくつかの変更が加えられました
fwrite($myfile,$text);
ob_clean();
?>
静的ページを生成したい場合でも、データベースにデータを挿入した後、その URL を readfile 関数に渡し、キャッシュに読み込んで fwrite を実行する必要があるためです。これは Tutuo です。私のお気に入りのメソッドの 1 つです。最小限のコード行で最高の効率を実現します。 Tutuo では、 http://localhost/?package=pricab&place_port=4 が裸のページ、つまりヘッダー、末尾、またはメニューのない純粋なコンテンツである必要があります。このようにして、独自のテンプレート myfile.html をより自由にカスタマイズできます。静的ページを生成したいだけの場合は、
ob_start();
@readfile("http://localhost/?package=pricab&place_port=4");
$string = ob_get_flush();
$myfile = fopen("myfile.html","w");
fwrite($myfile,$string);
ob_clean();
2 番目: 通常どおり静的 HTML ページを生成します。
この方法では、段階的に実行し、ページを読み込んでから、str_replace で置き換えます
最初のステップは、最終的なコンテンツ ページを作成することです:
$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);
$filename = "テスト/テスト.html";
$handle = fopen ($filename,"w"); // ファイル ポインターを開き、ファイルを作成します /* ファイルが作成され、書き込み可能かどうかを確認します */ if (!is_writable ($filename))
if (!fwrite ($handle,$content)){ //ファイルに情報を書き込みます die ("Generate file".$filename."Failed!") }
fclose ($handle); // ポインターを閉じる die ("ファイルの作成".$filename."成功!");このステップは比較的簡単です。単純な変数の置換の問題です。静的なリストページを生成する場合も、プログラムを使用して記事リストを生成し、それを大きな変数として扱い、テンプレート内の変数を置き換える方法は同じです。は。もちろん、情報が更新された場合には、一覧ページも再生成する必要があります。
$title = "http://";
$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);
while ($result = mysql_fetch_array ($query)){
$list .= ''.$result['title'].'
'; }
$content .= str_replace ("{articletable}",$list,$content); // 生成列表结束
// $content をエコーします。
$filename = "テスト/テスト.html";
$handle = fopen ($filename,"w"); //打开文件指针,创建文件
/* 检查文件否被创建かつ写可 */ if (!is_writable ($filename)){ die ("文件:".$filename." 写不可,请查查その属性后重试!"); } if (!fwrite ($handle,$content)){ //将信息写入文件 die ("生成文件".$filename."失败!"); } fclose ($handle); //关闭指针 die ("创建文件".$filename."成功!"); ?>
翻訳について: 以下は引用内容です: 本篇文章出典PHP论坛文章地址:http://bbs.php.cn/thread-36818-1-1.html
私が指定したように、各セクションは 20 個あります。 ある周波数のリスト内の文章は 45 条のデータ レベルであり、最初に次のようなパラメータを取得します。 ,for ($i = 0; $i
$onepage = '20';
$sql = "channel='$channelid' の記事から ID を選択";
$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' 制限 $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"); //打开文件指针,请检查そのプロパティ後重试!」; //修正はecho } if (!fwrite ($handle,$content)){ //将信息写入文件 echo "生成文件".$indexpath."失败!"; //修正はecho } fclose ($handle); //关闭指针 }
fclose ($fp); die ("生成分页文件完了,如生成不完全,请检查文件权限系统後重新生成!");?>
3番目:smarty模版生成静态页面
スマートは、smarty モジュールを使用しており、smarty 自身にはフェッチ関数があり、その機能は静的なトップ セクションを生成するために使用できる fread() に似ています。
$smarty = 新しい Smarty;
$smarty->caching = true;
// キャッシュが存在しない場合にのみ db 呼び出しを行う if(!$smarty->is_cached("index.tpl")) {
// データをダミーに作成します $address = "245 N 50th";
$db_data = array(
「都市」 => 「リンカーン」、
「状態」=> 「ネブラスカ」、
「郵便番号」=> "68502"
);
$smarty->assign("名前","フレッド");
$smarty->assign("アドレス",$address);
$smarty->assign($db_data); }
// 出力をキャプチャ $output = $smarty->fetch("index.tpl");
//この地方算は关键// ここで $output を使って何かをします echo $output; //ほほ
出力を見た結果が完了しました吧
その後、fwrite を実行すると、望ましい結果が得られます。
$fp = fopen("archives/2005/05/19/0001.html", "w");
fwrite($fp, $content);fclose($fp);
?>
$content = ob_get_contents();//php页面出力の全コンテンツ取得
$fp = fopen("archives/2005/05/19/0001.html", "w");
fwrite($fp, $content);
fclose($fp);
?>
PHP生成静态页面类
/*********************/
/* */
/* バージョン : 5.2.5 */
/* 著者 : liqiangwork#sohu.com */
/* QQ : 570937581 */
/* */
/*********************/
//----------------------------生成静态的类-------------- ----------------
class Makehtml{
パブリック $MbUrl、$OutUrl、$AllHtml、$SouChar、$ObjChar; //变量
パブリック $row; //游标
public $Shuzusou,$Shuzuobj; //代替文字符串数组
//----------------------初期化-------------------------- -
function __construct(){ //初期化
$this->MbUrl="";
$this->OutUrl="";
$this->AllHtml="";
$this->Sql="";
$this->SouChar=""
$this->ObjChar="";
}
//---------------------フィールドごとに自動置換---------- ----- ------------
関数 AutoReplace(){
//-----------------置換対象の文字列を自動的に取得-----------------
$tlen=count($row)
$shuzu1=配列();
$shuzu2=配列();
If($row){
$i=0;
foreach($row as $key => $value){
$shuzu2="";
$shuzu1=$値
$i++;
}
$this->Replacehtml(shuzu2,shuzu1);
}
//-----------------置換対象の文字列を自動的に取得-----------------
}
//---------------------フィールドによる自動置換---------- -- ----------
//---------------------配列の一括置換--------------- --- ----------
Function Replacehtml($Shuzusou,$Shuzuobj){ //配列を一括置換
If(count($Shuzusou)!=count($Shuzuobj)){
exit("置換配列が一致しません");
}
If($this->AllHtml==""){
exit("置き換えるものはありません");
}
for($i=0;$i
".$Shuzusou(i)."=".$Shuzuobj(i)."
")
}
}
//---------------------配列の一括置換が完了しました---------- ---- ----------
//----------------------------ファイルを読み取る-------------- -- ------------------
関数 Readfile(){
$file=fopen($this->MbUrl,"r");
$fsize=ファイルサイズ($this->MbUrl);
$this->AllHtml=fread($file,$fsize);
fclose($file);
//---------------------ファイルの読み取りが完了しました--------------- -- ---------------
//----------------------------ファイルを保存-------------- -------------------
function SaveFile(){
$file=fopen($this->OutUrl,"w");
fwrite($file,$this->AllHtml);
fclose($file);
}
//---------------------ファイルの保存が完了しました--------------- -------------------
}
//---------------------------------静的クラスの生成を完了---------- -- ------------------
//----静态生成----
$MyMake=新しいMakehtml;
$MyMake->MbUrl="News_Show.shtml";
$MyMake->Readfile();
$THTml=$MyMake->AllHtml;
$shuzu1=配列();
$shuzu2=配列();
$shuzu1[0]="<=$keybord$>";
$shuzu1[1]="<=$description$>";
$shuzu1[2]="<=$title$>";
$shuzu1[3]="<=$Title1$>";
$shuzu1[4]="<$=入札$>";
$shuzu1[5]="<$=Id$>";
$shuzu1[6]="<=$Contentb$>";
$shuzu1[7]="<$=BigId$>";
$shuzu1[8]="<=$Date$>";
$shuzu1[9]="<=$City$>";
$shuzu1[10]="<=$SmallId$>";
$shuzu1[11]="<=$CityId$>";
$shuzu1[12]="幅="100%"";
$MyMake->OutUrl="News_show_1.shtml";
$shuzu2[0]="数组0";
$shuzu2[1]="数组1";
$shuzu2[2]="数组2";
$shuzu2[3]="数组3";
$shuzu2[4]="数组4";
$shuzu2[5]="数组5";
$shuzu2[6]="数组6";
$shuzu2[7]="数组7";
$shuzu2[8]="数组8";
$shuzu2[9]="数组9";
$shuzu2[10]="数组10";
$shuzu2[11]="数组11";
$shuzu2[12]="幅="95%"";
$MyMake->Replacehtml($shuzu1,$shuzu2);
$MyMake->SaveFile();
//---------------------静态生成完了-----------