PHP による静的ページ分析の生成、テンプレートのキャッシュ、ファイルの書き込みについて説明します。

WBOY
リリース: 2016-06-13 12:22:48
オリジナル
948 人が閲覧しました

1. はじめに
速度の点では、静的ページは PHP などの動的ページよりもはるかに高速です。ただし、データベースやその他のデバイスを使用しない場合は、静的ページの柔軟性が低いためです。関連情報の保存、つまり閲覧権限制限などの修正や編集など、全体的な管理が煩雑になります。ただし、当社が開発しているニュースリリースシステムなど、頻繁に使用する一部のファイルについては、多くのユーザーがデータベースを表示する前にそれを読み取ることは望ましくありません。その結果、一方ではサーバーのリソースが消費され、他方ではブラウザの貴重な応答時間が多く消費されてしまいます。 、「静的ページ」アプローチでは、多くの Web サイトが現在このテクノロジーを使用しています。通常、管理バックグラウンド制御、直接表示用の HTML の生成、CSS で表示を制御する xhtml の使用、または xslt で表示用の XML の生成によって行われます。
2. 準備知識
テンプレート技術:
[PHP] テンプレートエンジン Smarty の徹底紹介--2005-12-31
[PHP] 設定と Smarty テクノロジの使用についての説明 --2006-01-04
キャッシュ テクノロジ:
多くの場合は一定ですが、依然として変更される可能性のある情報など、一部の情報はキャッシュに保存されます。これは、表示を高速化するために非常に重要です。いわゆるキャッシュは、サーバー側に保存される共有情報と同じです。たとえば、次の更新時刻を 5 分ごとに更新する必要がある場合は、最後の更新時刻を記録し、それが現在の時刻と比較することができます。それ以外の場合は、データベースを取得して更新します。もちろん、キャッシュはクライアント ユーザーによってアクティブ化される必要があります。これは 1 回だけ行う必要があります。
関数の形式 void ob_start(void )。
注: バッファーがアクティブ化されると、PHP プログラムからのファイル以外のヘッダー情報はすべて送信されず、内部バッファーに保存されます。バッファの内容を出力するには、ob_end_flush() または flash() を使用してバッファの内容を出力します。
フラッシュ: バッファーと出力の内容をリフレッシュします。
関数の形式: flash()
説明: この関数は頻繁に使用され、非常に効率的です。
ob_get_contents: 内部バッファの内容を返します。
関数の形式: string ob_get_contents(void)
説明: この関数は、出力バッファーがアクティブ化されていない場合、FALSE を返します。内部バッファ。
関数の形式: int ob_get_length(void)
説明: この関数は、ob_get_contents と同様に、現在のバッファーの長さを返します。出力バッファーがアクティブ化されていない場合は、FALSE を返します。
ob_end_clean: 内部バッファーを削除します。
関数形式: 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 string [, int length])
fwrite() は、string の内容をファイル ポインター ハンドルに書き込みます。 length を指定した場合、length バイトが書き込まれたとき、または文字列が書き込まれたときのいずれかが先に発生した時点で書き込みが停止します。
fwrite() は書き込まれた文字数を返します。エラーが発生した場合は FALSE を返します。
関連参照公式 Web サイト: ファイルリファレンス
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();
$filename = "$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 よりも簡単に使用できます。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート