在整个网页上使用一个文件的优缺点?

时间:2008-09-23 15:45:23

标签: php file

我不知道该如何表达这一点,但我会试一试。
我最近开始使用面向对象的PHP编写我的投资组合,我想知道是否根据最佳实践使用单个页面,其中内容根据SQL数据和$ _GET变量而变化?

如果是/否,为什么?

编辑:看看我的下一篇文章,更深入的细节。

12 个答案:

答案 0 :(得分:11)

您是否在询问使用前端控制器模式,单个文件是否满足您的所有请求?通常这是通过index.php和mod_rewrite来完成的,其中所有请求都将URL的其余部分作为查询字符串中的参数提供给它。

http://www.onlamp.com/pub/a/php/2004/07/08/front_controller.html

我倾向于建议将此模式用于应用程序,因为它为您提供了一个处理身份验证等功能的地方,并且通常您需要在更严格的级别集成内容,其中新功能是已注册的类与控制器通过某种机制很有意义。

对其他人提到的URL的担忧并不准确,因为URL结构和文件结构之间没有真正的关系,除非您使用古老的网站构建技术。一大堆apache功能基于以下概念:文件/目录结构和URL结构是不同的概念(别名模块,重写模块,内容协商等等)

答案 1 :(得分:5)

  • 不可扩展
  • 难以管理代码
  • Parser必须解析所有内容
  • Code Smell的完美示例
  • 一个错误导致整个网站崩溃

答案 2 :(得分:5)

如果你的意思是单个登陆页面(例如index.php)然后使用会话变量等来确定需要包含哪些代码,那么是的,这是一种常用的技术。

编辑:上面我的意思是Daniel Papasian在他的优秀帖子中详细解释了什么

如果您的意思是将所有HTML,SQL和PHP放在一个文件中,那么请不要,出于GateKiller指出的原因。

答案 3 :(得分:2)

actaul页面文件应该只包含您网站上标准“页面”中与该页面不同的内容(例如页面标题,索引页面可能包含获取最新消息的代码等)。在(或可能)在多个地方使用的Everythin应该被移动到外部php文件,并包括在内。例如:

  • 数据库信息(密码,用户名等)
  • 页眉/页脚
  • 登录代码

这使得代码更易于管理。例如,如果您更改数据库密码,它只需要更新一个文件,或者如果您决定向标题添加标题,则只需要一个页面而不是所有需要更改的页面。

它还使得添加新功能的工作少得多,例如新页面可能只是:

<?php
require ('config.php')
require ('start.php')
require ('header.php')
//custom page stuff
require ('footer.php')
?>

或通过cookie添加自动登录,是对Login()函数(创建cookie)和start.php(检查cookie +调用Login())的简单更改。

此外,您可以在以后轻松地将这些文件传输到其他项目。

答案 4 :(得分:0)

提到的所有门禁杀手+你也不能利用后期绑定。

答案 5 :(得分:0)

  • 难以管理代码

如果您正在使用版本控制,那么回滚站点的单个“页面”可能发生的任何更改将更加困难。因为您必须重新合并以获取可能在

之后发生的任何事情

答案 6 :(得分:0)

除非你使用mod重写

,否则它不是搜索引擎友好的

答案 7 :(得分:0)

我倾向于不同意 - 如果您的网站是由自定义CMS或类似的东西管理的,那么没有理由不使用一个页面。

我做了类似的事情我曾经写过一段时间。所有客户端都有一个default.asp页面,用于查询数据库中的主题,内容,附件和成员权限。为了进行更改,我只进行了一次更改,如果更改需要,则将其复制到我的其他客户端。

这当然不适用于大多数情况。如果你的网站有很多不同的东西(我的cms只是在加载页面时重复某些功能),那么多个页面确实是唯一的方法。

答案 8 :(得分:0)

对于那些感兴趣的人,有一个框架使用这个确切的模型。最初用于ColdFusion。这种方法仍有一个社区,大约一年前(2007年12月)发布了5.5版本。

FuseBox Framework site

Wikipedia entry

答案 9 :(得分:0)

此screendump和以下说明可能会更好地了解我的代码目前的样子。

File-structure

我使用与'互联网朋友'相同的模型,Daniel Papasian和其他一些人提到的模型;前控制器。

我的索引页面如下所示。

require_once 'config.php';
require_once 'class_lib/template.php';

$template = new template($config);
$template->dataQuery();
$template->pageCheck();
$template->titleAssembly();
$template->cssAssembly();
$template->metaAssembly();
$template->menuAssembly();
$template->content();
echo $template->publish();

类构造打开主模板文件并将其加载到一个变量中,每个方法都可以通过用生成的代码替换标记来操作它。 丑陋的URL并不是真正的问题,因为我将使用mod_rewrite来清理它 但是,Papasian有一个观点,这种方法更适合基于网络的应用程序等
我首先对我的问题不是非常具体而道歉 此外,非常感谢所有拒绝帮助的人。

答案 10 :(得分:0)

我经常使用没有.php扩展名的php文件(即网站)并添加

<Files site>
ForceType application/x-httpd-php 
</Files>

到.htaccess,它使apache将文件解释为php文件。

您可以将vars解析为网址:http://www.yourdomain.com/site/var1/var2/var3

中的文件

使用

$var_array = explode("/",$_SERVER['REQUEST_URI']); 
$var1 = $var_array[1];
$var2 = $var_array[2];
$var3 = $var_array[3];

获得vars。通过这种方式,您可以在没有modrewrite的情况下使用searchengingfriendlyurls的单个文件。

答案 11 :(得分:0)

re:URL和文件结构

我转换了一个网站,其中所有内容都在数据库中,并使用索引访问?p = 434模型。使用数据库没有任何好处,并且该网站让必须添加内容的人感到困惑,因为他们必须使用浏览器编辑内容,页面只是数字。

我将所有内容都删除并将其放在单独的文件中。每个人都有一个明智的名字,并组织成文件夹。每个文件看起来像这样:

require('sitelib');
do_header('about', 'About Us');
// content here
do_footer();

客户喜欢它。他们能够使用任何HTML编辑器进入,找到正确的文件并进行更改。他们能够制作新的页面。总而言之:有时,让URL和文件结构匹配很有用。