ホームページ  >  記事  >  php教程  >  PHPで静的ページを生成する方法

PHPで静的ページを生成する方法

WBOY
WBOYオリジナル
2016-06-21 08:56:54996ブラウズ

まず原理について話しましょう。あるラクダがたくさんの情報を調べたところ、どの方法を使っても原理は同じであることがわかりました。プログラムを使用して、対応するデータを読み取り、テンプレート内の変数を置き換え、静的ページを生成します。 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 で置き換えます

最初のステップは、最終的なコンテンツ ページを作成することです:

$title = "http://siyizhu.com テスト テンプレート"

$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))

{ die ("ファイル: ".$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."成功!"); ?>

翻訳について:
 
私が指定したように、各セクションは 20 個あります。 ある周波数のリスト内の文章は 45 条のデータ レベルであり、最初に次のようなパラメータを取得します。 ,for ($i = 0; $i $content = fread ($fp,filesize ("temp.html"));
$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 $this->AllHtml=str_replace($Shuzusou[$i],$Shuzuobj[$i],$this->AllHtml); //print("
".$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();
    //---------------------静态生成完了-----------

本篇文章出典PHP论坛文章地址:http://bbs.php.cn/thread-36818-1-1.html



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