0

このように、http はステートレスであるため、サイトhttp://jobfou.comのページでページ タイトルとメタ ディスクリプションを動的に設定しています。

<html>
<?php
ob_start();
?>
<title> <!--TITLE--> </title>
<body>
Some HTML Page Content From Database Goes Here.

<?php
//The PHP Code Here Gets executed on each page loads, dynamically.
$wholePageContents = ob_get_contents();
$post_title = "Page 1";
ob_end_clean();
echo str_replace("<!--TITLE-->", $post_title, $wholePageContents);
?>

</body>
<html>

ob_start(); を呼び出して、このようにページ タイトルとメタ ディスクリプションを設定してもよろしいですか。ページの読み込みごとに、長所と短所は何ですか、それともjqueryを使用するだけですか。どちらが優れており、メモリを消費しません。

4

1 に答える 1

4

大丈夫かどうかは、部分的に意見が分かれており、部分的にあなたの特定の状況にかかっています. 何ヶ月も前に初めて PHP を学び始めたとき、出力後処理のために出力全体をメモリにバッファリングすることは非常に一般的であるように思われましたが、メモリ消費量が増加するという大きな落とし穴があります。

小さなサイトの場合、これは大したことではありません。スクリプトのメモリ制限に達することはありません (結局のところ、テキストだけです。それを行うには出力の負荷を減らす必要があります)。おそらく、メモリとリクエストごとのメモリを解放するほど多くのトラフィックが発生することはありません。メトリクス (実際、この質問をしている場合、メトリクスを監視することさえないでしょう)。

2番目の問題は、あなたの例に特有のものです。PHP に求めていることは、その変数に保持されているテキスト全体をスキャンし、特定の文字列を探して置換することです。str_replaceこれは、いくつかのことを行わない限り、特に高価な操作ではありませんが、目的を達成するための最良の方法でも、理想的でも、推奨される方法でもありません。

PHP は関数のようなものだと考えてくださいstr_replace。HTMLが出力される前に実行/実行されます。したがって、ユーザーに送信される前に、PHP を使用して HTML 内にテキストを配置できます。これができるので、HTML 内に PHP コードを入れることができます。これは実行され、ほとんどの場合、HTML/テキストを出力します。

それでは、あなたの例を見てみましょう...

HTML に「タグ」を挿入して置き換える代わりに、PHP を直接 HTML に挿入することができます。

<?php
$title = "My first website";
?>
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
Some stuff here...
</body>
</html>

また、HTML 内の 1 つの単純なエコーである必要はありません (ただし、何かを行う必要があることを PHP インタープリターが認識できるように、タグを忘れないでください)。タイトルタグでもう少し派手なことをすることができます...

<html>
<head>
<title>

<?php
if($_SERVER['PHP_SELF'] == 'index.php') {
   echo 'My Website :: Homepage';
} else {
   $pagename = array_shift(explode('.', $_SERVER['PHP_SELF']));
   echo 'My Website :: '.$pagename;
}
?>
</title>
</head>
<body>
Some stuff here...
</body>
</html>

関数を使用して実行できる別の方法を次に示します。というファイルを作成しましょうtemplate_functions.php

function header($title = 'Some default title', $meta_kw = '', $meta_descr = '')
{
?>
<html>
<head>
<title><?php echo $title; ?></title>
<meta name="keywords" content="<?php echo $meta_kw; ?>" />
<meta name="description" content="<?php echo $meta_descr; ?>" />
</head>
<body>
<?php
}

function footer() {
?>
<div id="copyright">Copyright MyWebsite <?php echo date("Y"); ?></div>
</body>
</html>
<?php
}

これで、再利用可能なコードが少しできたので、メイン ヘッダーを変更したい場合 (つまり、Facebook の JavaScript をすべてのページに追加する場合)、すべてのスクリプトを編集しなくても実行できます。したがって、次のindex.phpようなものを作成できます。

<?php
require_once("template_functions.php");

header("My Homepage", "Some keywords", "Some description");
?>
Enter site content here
<?php
footer();
?>

そしてcontact.phpこのようなページ

<?php
require_once("template_functions.php");

header("Contact US", "Some keywords", "Some description");
?>
Enter Your contact info, social network info, a map or a contact form here if you want!
<?php
footer();
?>

これは、PHP と HTML の混合を開始する必要があること、さらにはコードの一部を再利用できる関数の追加ボーナスがあることを示しているはずです。テンプレートはこれよりもはるかに複雑になる可能性がありますが、私はあなたの心を吹き飛ばしたくありません. 小さく始め...

私の非常に長い答えを締めくくるために、別の言い方で質問に取り組みましょう。HTML でタグを使用して処理するのは間違っていますか? これに対する答えはNOです。あなたとあなたの状況に合うものを決める必要があります。やむを得ない場合もあれば、より良い方法である場合もあります。ただし、通常、この種のものが必要な場合は、テキストの規模がはるかに小さいことがわかります (つまり、ユーザー コメントの bbcode パーサー、またはどこかの txt ファイルに保存されている電子メール コンテンツのタグの置換)。

この回答がお役に立てば幸いです。ご不明な点がございましたら、お気軽にお問い合わせください

于 2013-09-01T00:18:26.653 に答える