ホームページ php教程 php手册 PHPで静的ページを生成する方法

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

Jun 21, 2016 am 08:56 AM

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

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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