ホームページ  >  記事  >  バックエンド開発  >  PHPによる静的ページ解析テンプレートの生成+キャッシュ+ファイルの書き込みについて_PHPチュートリアル

PHPによる静的ページ解析テンプレートの生成+キャッシュ+ファイルの書き込みについて_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:45:12753ブラウズ

1. はじめに
速度の点では、静的ページは PHP などの動的ページよりもはるかに高速です。ただし、静的ページは柔軟性が低いため、関連する情報がデータベースやデータベースの助けを借りて保存されていない場合は、その他のデバイスでは、閲覧権限制限などの変更や編集など、全体的な管理が比較的煩雑です。ただし、開発したニュースリリースシステムなど、頻繁に使用する一部のファイルについては、多くのユーザーに公開したくない場合があります。結果を表示する前にデータベースを読み取ることは、サーバーのリソースを消費する一方で、ブラウザの貴重な応答時間を多く消費することになります。そのため、「静的ページ」アプローチでは、現在、多くの Web サイトではこのテクノロジーが使用されており、通常はバックエンドで管理され、直接表示用の HTML を生成するか、CSS で表示を制御するために xhtml を使用するか、xslt で表示用の XML を生成します。 HTML の生成方法について簡単に説明します
2. 予備知識
テンプレート技術 :
[PHP] テンプレート エンジン Smarty の詳細な紹介--2005-12-31
[PHP] Smarty 技術の構成と使用方法について説明します。 --2006-01-04
キャッシュ技術:
一部の情報は変更されないことがよくありますが、変更される可能性があります。いわゆるキャッシュは、表示を高速化するために、変更される情報をキャッシュに入れるのに非常に役立ちます。一般的に理解されているのは、サーバー側に保存される共通の情報です。キャッシュを保存するときに、たとえば 5 分に 1 回更新するかどうかを指定できます。 、最終更新時間を記録し、それを現在の時間と比較することができます。それ以外の場合は、キャッシュされたデータを直接読み取る必要があります。クライアント ユーザー、1 回のみ。
ob_start() 関数: 出力バッファを開きます。
関数形式 void ob_start(void)
説明: バッファがアクティブ化されると、PHP プログラムからのすべての非ファイル ヘッダーは送信されません。ただし、内部バッファに保存されます。バッファの内容を出力するには、ob_end_flush() または flash() を使用してバッファの内容を出力します。
フラッシュ: バッファーと出力の内容をフラッシュします。
関数形式: flash()
説明: この関数は頻繁に使用され、非常に効率的です。
ob_g​​et_contents: 内部バッファの内容を返します。
関数の形式: string ob_get_contents(void)
説明: この関数は、出力バッファがアクティブ化されていない場合、現在のバッファの内容を返します。
ob_g​​et_length: 内部バッファの長さを返します。
関数の形式: int ob_get_length(void)
説明: この関数は、ob_get_contents と同様に、現在のバッファーの長さを返します。出力バッファーがアクティブ化されていない場合は、FALSE を返します。
ob_end_clean: 内部バッファーの内容を削除して閉じます。 it 内部バッファ
関数形式: void ob_end_clean(void)
説明: この関数は内部バッファの内容を出力せず、削除します
ob_end_flush: 内部バッファの内容をブラウザに送信し、出力バッファを閉じます
関数形式: void ob_end_flush(void)
説明: この関数は出力バッファーの内容 (存在する場合) を送信します
ob_implicit_flush: 絶対フラッシュをオンまたはオフにします
関数形式: void ob_implicit_flush ([int flag])
説明: デフォルトはオフですバッファ、絶対出力をオンにした後、各スクリプト出力はブラウザに直接送信され、flush() を呼び出す必要がなくなりました。
ファイルの書き込み:
int fwrite (リソース ハンドル, 文字列 string [, int length])
fwrite() Write文字列の内容をファイル ポインタ ハンドルに渡します。 length を指定した場合、length バイトが書き込まれたとき、または文字列が書き込まれたときのいずれかが先に発生した時点で書き込みが停止します。
fwrite() は書き込まれた文字数を返します。エラーが発生した場合は FALSE を返します。
関連参考公式サイト: ファイルリファレンス
3. 解決策: ob_start バッファーをオンにし、データが呼び出されたときに ob_get_contents を取得し、静的ページを生成し、ob_end_clean でバッファーをクリアします。例 (php+mysql の組み合わせ):
データベースの作成:

コードをコピー コードは次のとおりです:
Create TABLE `bihtml` (
`id` int(11) NOT NULL auto_increment,
` szdtitle` varchar(16 ) NOT NULL、
`szdcontent` text NOT NULL、
PRIMARY KEY (`id`)
) TYPE

現在の ID を取得し、テンプレートをインポートします:

コードをコピーしますコードは次のとおりです:

ob_start();
$id=_POST['id']
if(!isset($id)&is_integer($id))
{
@$db=new mysqli('localhost','root','admin','bihtml' );
$result=$db->fetch_one_array("select * from szd_bi where id='$id'");
if(!emptyempty($result))
{
$tmp->assign(array(
"Szdtitle",htmlspecialchars($result['titles']),
"Szdcontent",$result['titles'] ));
}
$tpl->display('default_1.tpl');
$this_my_f= ob_get_contents(); //此处关键
ob_end_clean();
$ファイル名 = "$id.html";
if(tohtmlfile_cjjer($filename,$this_my_f))
echo "生成成功 $filename";
else
echo "生成识别";
}
}

//生成ファイルの手順書出関数
function tohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content)
{
if (is_file ($file_cjjer_name)){
@unlink ($file_cjjer_name);
}
$cjjer_handle = fopen ($file_cjjer_name,"w");
if (!is_writable ($file_cjjer_name)){
return false;
}
if (!fwrite ($cjjer_handle,$file_cjjer_content)){
return false;
}
fclose ($cjjer_handle); //关闭指针
return $file_cjjer_name;
}

四、说明事项
1: 一般建议管理员追加データの時候就生成静态页面、可考虑记录生成文件名次和路径。
2: php は主に ob_starts() と ob_get_contents であり、静的な面を生成するときに非常に役立ちますが、当然のことながら、データ パッケージを直接置き換えてモジュール パネルの面の量を考慮することもできます。
3: 主要なモジュールは、smarty を使用します。phplib はすべて使用可能で、smarty の使用は比較的容易です。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/320371.html技術記事一、速度的に言えば、静的页面の方が動的页面の比較phpが非常に多いですが、これは疑いの余地はありませんが、静的页面の活性差によるものであり、データセットやその他の設計を利用しない場合...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。