【问题标题】:Pros and cons of using one file for entire webpage? [closed]对整个网页使用一个文件的利弊? [关闭]
【发布时间】:2010-09-12 10:03:58
【问题描述】:

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

如果是/不是,为什么?

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

【问题讨论】:

    标签: php file


    【解决方案1】:

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

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

    我倾向于建议将此模式用于应用程序,因为它为您提供了一个处理身份验证等事务的单一位置,并且您通常需要在更紧密的级别上集成事物,其中新功能是已注册的类通过某种机制使用控制器很有意义。

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

    【讨论】:

      【解决方案2】:
      • 不可扩展
      • 难以管理代码
      • 解析器必须解析所有内容
      • 代码气味的完美示例
      • 一个错误会使您的整个网站崩溃

      【讨论】:

      • 不可扩展?!曾经访问过维基百科吗?
      【解决方案3】:

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

      编辑:以上我的意思是 Daniel Papasian 在他的优秀帖子中详细解释的内容

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

      【讨论】:

      • 我希望这更像是他的想法。有时我这样做,有时我不这样做。这取决于其他人(如设计师)是否会尝试修改网站。因为他们对调用其他页面的页面感到困惑。
      • 模板引擎几乎就是为消除这种混乱而设计的。页面的动态区域在(希望是语义的)HTML 中标有特殊标签,因此负责设计布局的人员可以识别不同内容应该去的地方。
      【解决方案4】:

      实际页面文件应仅包含该页面与您网站上标准“页面”的不同之处(例如页面标题、索引页面可能包含获取最新消息的代码等)。所有被(或可能)在多个地方使用的东西,都应该被移到外部 php 文件中,并包含在内。例如:

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

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

      这也大大减少了添加新功能的工作量,例如,一个新页面可能只是:

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

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

      您还可以在将来轻松地将这些文件传输到其他项目。

      【讨论】:

      • 和我对投资组合页面所做的差不多,只是为了便于管理。将包含的文件放在不同的文件夹中并设置适当的权限。
      【解决方案5】:

      门杀手提到的所有内容 + 你也不能使用后期绑定。

      【讨论】:

        【解决方案6】:
        • 难以管理代码

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

        【讨论】:

          【解决方案7】:

          除非你使用 mod rewrite,否则它对搜索引擎不友好

          【讨论】:

            【解决方案8】:

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

            我在不久前写的 CMS 上做了类似的事情。所有客户端都有一个 default.asp 页面,用于查询数据库的主题、内容、附件和成员权限。为了进行更改,我只进行了一次更改,并在需要更改时将其复制给其他客户。

            这当然在大多数情况下都行不通。如果您的网站做了很多不同的事情(我的 cms 只是在加载页面时重复了某些功能),那么多个页面确实是唯一的方法。

            【讨论】:

            • 投了你一票。老实说,我不明白你为什么被否决。我可能不同意,但这并不意味着你错了。 :)
            【解决方案9】:

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

            FuseBox Framework site

            Wikipedia entry

            【讨论】:

              【解决方案10】:

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

              我使用的模型与“互联网朋友”、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 的应用程序等。

              对于我的问题一开始没有很具体,我深表歉意。
              此外,非常感谢所有提供帮助的人。

              【讨论】:

                【解决方案11】:

                我经常使用没有.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];
                

                获取变量。这样您就可以使用带有 searchengingfriendlyurls 的单个文件,而无需 modrewrite。

                【讨论】:

                  【解决方案12】:

                  re: URL 和文件结构

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

                  我将所有内容都提取出来并放在单独的文件中。每个都有一个合理的名称,并被组织成文件夹。每个文件看起来像这样:

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

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

                  【讨论】:

                    猜你喜欢
                    • 2011-12-26
                    • 2016-10-13
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-05-14
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多