Drupal Bootstrap - Request Processing in Drupal
In this blog post I try to list the sequence of steps Drupal 5 takes to process an HTTP request. I have not seen it all put together in any one place. I do, however, believe that understanding the request life-cycle is crucial to grasping how a web-system works, so I hope this post will be useful to some people.
Drupal 5 uses a mechanism it calls Bootstrapping, to process an HTTP request. It is so complex that a book can easily be written about it, but that is obviously not my purpose. Therefore, I try to be laconic and concentrate on making the "diagram" rather expressive than detailed.
Disclaimer: inline comments from Drupal source code were used to compile this text.
- _drupal_bootstrap(DRUPAL_BOOTSTRAP_EARLY_PAGE_CACHE); - non-database cache.
- _drupal_bootstrap(DRUPAL_BOOTSTRAP_ACCESS); - identify and reject banned hosts.
- _drupal_bootstrap(DRUPAL_BOOTSTRAP_LATE_PAGE_CACHE); - start the variable system and try to serve a page from the cache.
- _drupal_bootstrap(DRUPAL_BOOTSTRAP_PATH); - set \$_GET['q'] to Drupal path of request
- drupal_set_header('Content-Type: text/html; charset=utf-8'); - hard-coded!
- fix_gpc_magic(); - undo magic quotes
- locale_initialize(); - initialize the localization system. Depends on i18n.module being loaded already
- menu.inc -> menu_execute_active_handler();\ via menu_get_menu() - going through the menu hooks of all modules, determines the callback function registered to process current URI and delegates to it, or returns either MENU_ACCESS_DENIED or MENU_NOT_FOUND.
theme.inc -> theme('page', \$return); - wraps the output of the callback function into a page-wide theme.