/init/init.php

https://bitbucket.org/alexamiryan/stingle · PHP · 173 lines · 133 code · 36 blank · 4 comment · 21 complexity · 2f8d492ba33da9279f701fa077a545b8 MD5 · raw file

  1. <?php
  2. require_once(STINGLE_PATH . "core/Cgi.class.php");
  3. require_once(STINGLE_PATH . "core/Config.class.php");
  4. require_once(STINGLE_PATH . "core/ConfigManager.class.php");
  5. require_once(STINGLE_PATH . "core/Debug.class.php");
  6. require_once(STINGLE_PATH . "core/Dependency.class.php");
  7. require_once(STINGLE_PATH . "core/Hook.class.php");
  8. require_once(STINGLE_PATH . "core/HookManager.class.php");
  9. require_once(STINGLE_PATH . "core/Loader.class.php");
  10. require_once(STINGLE_PATH . "core/Model.class.php");
  11. require_once(STINGLE_PATH . "core/PackageManager.class.php");
  12. require_once(STINGLE_PATH . "core/Reg.class.php");
  13. require_once(STINGLE_PATH . "core/SiteMode.class.php");
  14. require_once(STINGLE_PATH . "core/Exceptions/EmptyArgumentException.class.php");
  15. require_once(STINGLE_PATH . "core/Exceptions/InvalidArrayArgumentException.class.php");
  16. require_once(STINGLE_PATH . "core/Exceptions/InvalidIntegerArgumentException.class.php");
  17. require_once(STINGLE_PATH . "core/Exceptions/InvalidTimestampArgumentException.class.php");
  18. require_once(STINGLE_PATH . "configs/system.inc.php");
  19. require_once(STINGLE_PATH . "helpers/system.php");
  20. require_once(STINGLE_PATH . "helpers/func.php");
  21. if(!isset($SYSCONFIG)){ $SYSCONFIG = array(); }
  22. if(!isset($CONFIG)){ $CONFIG = array(); }
  23. $sysconfig = new Config($SYSCONFIG);
  24. register_shutdown_function("shutdown");
  25. set_exception_handler("default_exception_handler");
  26. set_error_handler("default_error_handler");
  27. Reg::register('packageMgr', new PackageManager());
  28. $globalConfig = null;
  29. if($sysconfig->Stingle->BootCompiler === true){
  30. if(!defined('DISABLE_APCU') && extension_loaded('apcu')){
  31. $globalConfig = apcu_fetch('globalConfig');
  32. if($globalConfig === false){
  33. $globalConfig = ConfigManager::mergeConfigs(new Config($CONFIG), $sysconfig);
  34. apcu_store('globalConfig', $globalConfig);
  35. }
  36. }
  37. else{
  38. $configCacheFilename = $sysconfig->Stingle->CoreCachePath . 'configs';
  39. if(file_exists($configCacheFilename)){
  40. try{
  41. $globalConfig = unserialize(file_get_contents($configCacheFilename));
  42. }
  43. catch(Exception $e){
  44. unlink($configCacheFilename);
  45. $globalConfig = ConfigManager::mergeConfigs(new Config($CONFIG), $sysconfig);
  46. }
  47. }
  48. else{
  49. $globalConfig = ConfigManager::mergeConfigs(new Config($CONFIG), $sysconfig);
  50. file_put_contents($configCacheFilename, serialize($globalConfig));
  51. }
  52. }
  53. }
  54. else{
  55. $globalConfig = ConfigManager::mergeConfigs(new Config($CONFIG), $sysconfig);
  56. }
  57. ConfigManager::setGlobalConfig($globalConfig);
  58. ConfigManager::initCache();
  59. if(isset($globalConfig->Stingle->errorReporting)){
  60. error_reporting($globalConfig->Stingle->errorReporting);
  61. }
  62. if($globalConfig->Stingle->autostartSession){
  63. startSession();
  64. }
  65. if($globalConfig->Stingle->autoObStart){
  66. ob_start('stingleOutputHandler');
  67. }
  68. Cgi::setMode(defined("IS_CGI"));
  69. Debug::setMode($globalConfig->Debug->enabled);
  70. SiteMode::set($globalConfig->SiteMode->mode);
  71. // Register User Hooks
  72. if(isset($globalConfig->Hooks)){
  73. foreach(get_object_vars($globalConfig->Hooks) as $hookName => $funcName){
  74. if(is_object($funcName)){
  75. foreach (get_object_vars($funcName) as $regFuncName){
  76. HookManager::registerHook(new Hook($hookName, $regFuncName));
  77. }
  78. }
  79. else{
  80. HookManager::registerHook(new Hook($hookName, $funcName));
  81. }
  82. }
  83. }
  84. // Init packages/plugins
  85. HookManager::callHook("BeforePackagesLoad");
  86. $classesCacheFilename = $globalConfig->Stingle->CoreCachePath . 'classes.php';
  87. if($globalConfig->Stingle->BootCompiler === true){
  88. if(file_exists($classesCacheFilename)){
  89. $GLOBALS['doNotIncludeClasses'] = true;
  90. require_once ($classesCacheFilename);
  91. }
  92. if(!isset($GLOBALS['includedClasses'])){
  93. $GLOBALS['includedClasses'] = array();
  94. }
  95. }
  96. foreach(get_object_vars($globalConfig->Packages) as $package){
  97. $package = get_object_vars($package);
  98. if(!isset($package[1])){
  99. $package[1] = array();
  100. }
  101. Reg::get('packageMgr')->addPackage($package[0], $package[1]);
  102. }
  103. Reg::get('packageMgr')->load();
  104. HookManager::callHook("AfterPackagesLoad");
  105. if(ConfigManager::getGlobalConfig()->Stingle->BootCompiler === true){
  106. if(!file_exists($classesCacheFilename)){
  107. $fileContents = "<?php\n\n";
  108. if(count($GLOBALS['includedClasses']) > 0 and !isset($GLOBALS['doNotIncludeClasses'])){
  109. foreach($GLOBALS['includedClasses'] as $file){
  110. $content = file_get_contents($file['file']);
  111. $content = str_replace("<?php", "", $content);
  112. $content = str_replace("<?", "", $content);
  113. $content = str_replace("?>", "", $content);
  114. if(!empty($file['precompileCode'])){
  115. $fileContents .= $file['precompileCode'] . "\n\n";
  116. }
  117. $fileContents .= $content . "\n\n";
  118. if(!empty($file['postcompileCode'])){
  119. $fileContents .= $file['postcompileCode'] . "\n\n";
  120. }
  121. }
  122. file_put_contents($classesCacheFilename, $fileContents);
  123. }
  124. }
  125. }
  126. // Request Parser
  127. HookManager::callHook("BeforeRequestParser");
  128. HookManager::callHook("BeforeRequestParserStep2");
  129. HookManager::callHook("RequestParser");
  130. HookManager::callHook("AfterRequestParser");
  131. HookManager::callHook("BeforeController");
  132. HookManager::callHook("Controller");
  133. HookManager::callHook("AfterController");
  134. //$time = microtime(true);
  135. HookManager::callHook("BeforeOutput");
  136. HookManager::callHook("Output");
  137. HookManager::callHook("AfterOutput");