PHP动态包括内容方法

时间:2012-07-24 17:00:18

标签: php dynamic include

我想在每个页面上使用PHP使用不同内容的页眉和页脚相同。这样做的最佳方法是什么?

我知道这两个受欢迎的,但不知道他们中的哪一个(或者其他一些人)可以选择:

1。在每个页面上包含页眉和页脚

contact.php about.php 等每个页面中,您必须在页面顶部包含标题,在页面底部包含页脚。然后内容介于两者之间。例如, contact.php 将如下所示:

<?php include("header.php"); ?>
Lorem ipsum dolor sit amet...
<?php include("footer.php"); ?>

如果您想要请求,只需输入example.com/contact.php

即可

2。的index.php?页= XYZ

contact.php about.php 等页面中,您只存储实际内容。然后你有 index.php 和一些参数(例如页面),你可以通过它来指定要包含的内容。例如, contact.php 文件如下所示:

Lorem ipsum dolor sit amet...

这样的 index.php 文件(这是简化版):

<html>
    <head>
        <title>Lorem ipsum</title>
    </head>
    <body>
        <?php include(some_parser_function($_GET["page"].".php")); ?>
    </body>
</html>

现在,当您请求index.php?page=contact时,它会显示 index.php 以及开始和结束body标记之间的内容来自 contact.php < / em>的

第一种方法在我看来有点不实用,因为你必须将include函数写入每一页。在第二种方法中,如果你想拥有像example.com/contact.phpexample.com/contact这样的好网址,你需要做一个apache mod_rewriting ......

哪一种(和其他)方法更好/更受欢迎?为什么?

感谢。

3 个答案:

答案 0 :(得分:2)

如果可能的话,我会避免动态包含。它会打开一个安全漏洞,除非您清理来自外部源的变量,即您的情况下的GET参数。您可以采用模型 - 视图 - 控制器框架之类的方法。它们的代码基本上将模板的输出放入布局中。

答案 1 :(得分:1)

选项2对于模板更好。您还可以使用“重写”使其显示,而不会在网址末尾显示?page = pagename。另外,根据您网站上的页面数量,每个文件都必须包含两个页面。

但是如果我是你,我会考虑使用ob_start()ob_get_contents()和ob_flush()。然后,在开始输出html之前,您可以实际运行包含文件中的所有代码。

以下是一个例子:

ob_start();
include("{$page_name}.php");
$page_contents = ob_get_contents();
ob_end_clean();

ob_start();
include("templates/standard.php");
$full_html = ob_get_contents();
ob_end_clean();

echo $full_html;

通过这种方式,您可以轻松创建多个模板,以便随时使用。模板文件如下所示:

<html>
    <head>
        <title>Lorem ipsum</title>
    </head>
    <body>
        <?php echo $page_contents; ?>
    </body>
</html>

答案 2 :(得分:0)

一般来说,2方法的最大优点是验证/插入。如果采用第一种方法,则必须一次又一次地进行所有验证/插入。如果您必须更改/添加/删除某些内容,则必须更改所有页面。这很烦人。我通常更喜欢第二种方法,因为你可以集中所有内容,避免重复相同的指令。

但这也取决于你的网站。

我会举个例子:我曾经做过一个有两个主要部门的网站。

在这种情况下,我做了第2种方法的2个不同页面。

(当我谈论验证时,我的意思是验证所有SESSION变量,如果用户被记录,如果他是ADM等等)