Why do index.php files for CMS’s like wordpress & drupal contain little other than an include/require statement?

Several popular CMS’s such as Drupal, WordPress, etc. have an index.php file that is pretty much empty except for a include/require statement that includes some other PHP file (as in one file) containing all of the bootstrap code for the CMS. What is the rationale for this? Why not just move all of the bootstrapping code into index.php if it is doing nothing other than including the bootstrapping code anyway?

I’m trying to build a CMS as an example project to improve my PHP skills, and I’d like to understand what design considerations led them to do it this way. I understand the benefit of breaking up applications into multiple files, but I’ve never heard of making a file that does nothing but include another one. Obviously there is some benefit, since several major CMS projects designed it this way, but I just can’t figure out what it is.

Read More

Can someone explain to me the reasoning for this?

Related posts

Leave a Reply

4 comments

  1. In Drupal’s case, there are other files that do a similar bootstrap. These typically aren’t normal pages, but do serve important purposes. Off the top of my head cron.php, update.php, and install.php do this. I use the bootstrap process at the beginning of custom import scripts, as well as scripts that get called by cron that I don’t want to use a hook_cron for.

  2. I can think of two reasons:

    • When using a product like WordPress, you sometimes end up adding user hacks to the front controller – say, setting custom constants, specific redirects, or an additional layer of access control, or whatever. An empty index file allows you to add that kind of stuff without disturbing the product’s original code.

    • Having everything in a separate bootstrap creates the possibility of moving all code (including the bootstrap) to a location outside the web root, and include it from there.

  3. Aesthetics mostly. You can have a clean and neat directory structure (outside of webroot), in which bootstrapping files are separated from index.php file. There are probably several of them (vs. one index.php file) and they are doing different things (db init, authorisation).

    I also found one or two CMS which start in debug declaration (in order to switch display errors and warnings before including any files, so you can have your errors printed before php includes a file with syntax error, but that’s not really a good practice).

  4. I would say this is good design because you can easily change the path to the bootstrap, which makes it very easy to change location of the CMS, if ever necessary.

    Another good reason is you could also be running a dev CMS while developing, and roll out new versions with one path change in the index.php.