在整个网页上使用一个文件的利弊?
我不确定该如何表达,但请尝试一下。
我最近开始用面向对象的PHP编写我的作品集,我想知道是否根据最佳实践使用单个页面,其中页面的内容取决于SQL数据和$ _GET变量?
如果是/否,为什么?
编辑:看一下我的下一篇文章,更深入的细节。
解决方案
- 不可扩展
- 难以管理的代码
- 解析器必须解析所有内容
- 完美的代码气味示例
- 一个错误使整个网站崩溃
Gatekiller提到的所有内容+我们也不能利用后期绑定。
- 难以管理的代码
如果我们使用的是版本控制,则要回滚站点上单个"页面"可能发生的所有更改将更加困难。因为我们将必须合并回去,以备不时之需
除非我们使用mod rewrite,否则它对搜索引擎的友好程度不高
如果我们是指一个登陆页面(例如index.php),然后使用会话变量等来确定需要包含哪些代码,那么可以,这是一种常用的技术。
编辑:以上所述,我指的是丹尼尔·帕帕西安(Daniel Papasian)在其精彩文章中详细解释的内容
如果我们打算将所有HTML,SQL和PHP都放在一个文件中,那么由于GateKiller指出的原因,请不要。
我们是否在询问使用前端控制器模式(其中单个文件满足所有请求)?通常,这是通过index.php和mod_rewrite来完成的,它获取所有请求,并将其余URL作为查询字符串中的参数提供给它。
http://www.onlamp.com/pub/a/php/2004/07/08/front_controller.html
我倾向于建议将此模式用于应用程序,因为它为我们提供了一个地方来处理诸如身份验证之类的事情,并且通常我们需要在更严格的级别上集成事物,其中将新功能作为向控制器注册的类。通过某种机制很有意义。
除非我们使用古老的网站构建技术,否则其他人提到的有关URL的担忧并不是真正准确的,因为URL结构与文件结构之间没有真正的关系。大量的apache功能基于以下概念:文件/目录结构和URL结构是不同的概念(别名模块,重写模块,内容协商等)。
如果网站是由自定义CMS或者类似内容管理的,那么我通常会不同意,没有理由不使用一页。
我前一段时间写的CMS也做了类似的事情。所有客户端都有一个default.asp页面,该页面向数据库查询主题,内容,附件和成员权限。为了进行更改,我只进行了一次更改,然后将其复制到其他客户(如果需要更改)。
当然,在大多数情况下这是行不通的。如果网站做很多不同的事情(我的cms在加载页面时只是重复了某些功能),那么确实要走多个页面。
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())的简单更改。
我们也可以在将来轻松地将这些文件传输到其他项目。
对于那些感兴趣的人,有一个使用此精确模型的框架。最初用于ColdFusion。这种方法仍然存在一个社区,大约一年前(2007年12月)发布了5.5版。
FuseBox Framework网站
维基百科条目
此屏幕转储和以下说明可能会更好地了解我的代码目前的样子。
我使用的是与"互联网朋友",丹尼尔·帕帕斯安(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指出,此方法将更适合基于Web的应用程序等。
首先,我对我的问题不太明确表示歉意。
此外,对每个放弃几行帮助的人都表示"感谢"。
我经常使用不带.php扩展名的php文件(即网站)并添加
<Files site> ForceType application/x-httpd-php </Files>
到.htaccess文件,该文件使apache将文件解释为php文件。
我们可以将vars解析为url中的文件: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一起使用。
回复:URL和文件结构
我转换了一个网站,其中所有内容都在数据库中,并使用index?p = 434模型进行访问。使用数据库没有任何好处,而且该站点使不得不添加内容的人们感到困惑,因为他们必须使用浏览器来编辑内容,而页面仅仅是数字。
我提取了所有内容并将其放在单独的文件中。每个人都有一个明智的名字,并被组织到文件夹中。每个文件看起来像这样:
require('sitelib'); do_header('about', 'About Us'); // content here do_footer();
客户喜欢它。他们能够使用任何HTML编辑器进入,找到正确的文件并进行更改。他们能够制作新的页面。总而言之:有时,使URL和文件结构匹配是很有用的。