我正在我的网站http://jobfou.com的页面上动态设置页面标题和元描述,因为http是无状态的,就像这样。
<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。哪个更好,不消耗内存。
答案 0 :(得分:4)
是否可以,部分是自以为是,部分取决于您的具体情况。当我第一次开始学习PHP之前的许多时候,将整个输出缓冲到内存中进行后期输出处理似乎很常见,但它有一个主要的缺陷,即增加了内存消耗。
对于小型网站来说,这不是什么大问题。你不会达到任何脚本内存限制(毕竟它只有文本,你需要一个大量的输出才能做到这一点),你可能不会有那么多的流量,每个请求释放内存和内存在你的指标(事实上,如果你问这个问题,你甚至可能不会监控任何指标。)
第二个问题特别针对您的示例。你要求PHP做的是扫描该变量中的整个文本,查找特定字符串然后替换它。这不是特别昂贵的操作,除非你{{1}做了一些好事,但它不是最好的,理想的,也不是实现你想要的方法。
将PHP视为str_replace
函数。它在输出HTML之前运行/执行。因此,在将文本发送给用户之前,您可以使用PHP在HTML中放置文本。由于我们可以这样做,我们可以将PHP代码放在我们的HTML中,这些代码将被运行并且在大多数情况下会打印一些HTML /文本。
那么让我们来看看你的例子......
我们可以将一些PHP直接放入HTML
,而不是将“标签”插入HTML中进行替换str_replace
它不仅仅是HTML中的一个简单回显(不要忘记标记,因此PHP解释器知道它需要做一些事情)。我们可以在标题标签中做一些更有趣的事情......
<?php
$title = "My first website";
?>
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
Some stuff here...
</body>
</html>
这是使用函数的不同方法。让我们创建一个名为<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
现在我们有一些可重复使用的代码,所以如果我们想要更改主标题(即将facebook javascript添加到每个页面),我们可以在不编辑每个脚本的情况下完成。现在我们可以像这样创建一个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
}
:
index.php
和<?php
require_once("template_functions.php");
header("My Homepage", "Some keywords", "Some description");
?>
Enter site content here
<?php
footer();
?>
这样的页面
contact.php
这应该有希望表明你必须开始将PHP与HTML混合,甚至还有额外的功能,可以让你重复使用一些代码。模仿可以变得复杂得多,但我不想打扰你的想法。从小处开始......
为了最终确定我的答案,让我们以不同的方式解决问题。在HTML中使用标签并处理它们是错误的吗?答案是否定的。你必须决定什么对你和你的情况有用。有时这是不可避免的,有时它只是一种更好的做事方式。但是你通常会发现当你需要这种东西时,它的文本规模要小得多(即用户评论的bbcode解析器,或者替换保存在txt文件中的电子邮件内容中的标签)。
希望这个答案可以帮到你!我们在这里提出任何问题