【问题标题】:Why do index.php files for CMS's like wordpress & drupal contain little other than an include/require statement?为什么像 wordpress 和 drupal 这样的 CMS 的 index.php 文件只包含一个 include/require 语句?
【发布时间】:2011-03-27 08:30:33
【问题描述】:

Drupal、Wordpress 等几个流行的 CMS 都有一个几乎是空的 index.php 文件,除了包含一些其他 PHP 文件的 include/require 语句(如 one 文件) 包含 CMS 的所有引导代码。这样做的理由是什么?如果除了包含引导代码之外什么都不做,为什么不将所有引导代码移动到 index.php 中呢?

我正在尝试构建一个 CMS 作为示例项目来提高我的 PHP 技能,我想了解是什么设计考虑导致他们这样做。我了解将应用程序拆分为多个文件的好处,但我从未听说过制作一个除了包含另一个文件之外什么都不做的文件。显然有一些好处,因为几个主要的 CMS 项目都是这样设计的,但我就是不知道它是什么。

有人可以向我解释一下原因吗?

【问题讨论】:

  • 为了清楚起见,我会理解它是否包含一堆文件(例如,一个用于 DB 初始化,一个用于初始化 URL 路由等),但它只包含一个名为“引导”或“加载”,这是我不明白的。

标签: wordpress drupal content-management-system include


【解决方案1】:

在 Drupal 的情况下,还有其他文件可以执行类似的引导。这些通常不是普通页面,但确实有重要用途。在我脑海中cron.phpupdate.phpinstall.php 这样做。我在自定义导入脚本的开头使用引导过程,以及由cron 调用的我不想使用hook_cron 的脚本。

【讨论】:

  • 谢谢——现在说得通了。我没有看过 cron/install 脚本,所以我没有注意到。
【解决方案2】:

我能想到两个原因:

  • 当使用像 Wordpress 这样的产品时,您有时最终会在前端控制器中添加用户 hack - 例如,设置自定义常量、特定重定向或额外的访问控制层,等等。一个空的索引文件可以让你在不干扰产品原始代码的情况下添加这种东西。

  • 将所有内容都放在单独的引导程序中可以将所有代码(包括引导程序)移动到 Web 根目录之外的位置,并从那里包含它。

【讨论】:

    【解决方案3】:

    主要是美学。您可以拥有一个干净整洁的目录结构(在 webroot 之外),其中引导文件与 index.php 文件分开。其中可能有几个(相对于一个 index.php 文件)并且它们正在做不同的事情(db init、授权)。

    我还发现了一两个在调试声明中开始的 CMS(为了在包含任何文件之前切换显示错误和警告,因此您可以在 php 包含具有语法错误的文件之前打印错误,但这并不是真正的好的做法)。

    【讨论】:

    • 有几个引导文件,但它们都是从一个名为“bootstrap.inc”的文件中调用的,该文件又包含在 index.php 中。我理解 DB 初始化与 URL 路由等的分离……我不明白的是 bootstrap.inc 和 index.php 之间的分离(除了包含 bootstrap.inc)
    【解决方案4】:

    我会说这是一个很好的设计,因为您可以轻松更改引导程序的路径,这使得更改 CMS 的位置变得非常容易,如果有必要的话。

    另一个很好的理由是,您还可以在开发时运行开发 CMS,并在 index.php 中通过一个路径更改推出新版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 2017-08-12
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      相关资源
      最近更新 更多