PageRenderTime 54ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/yaf.c

https://gitlab.com/oytunistrator/yaf
C | 315 lines | 220 code | 33 blank | 62 comment | 17 complexity | 7f38098b892e230c6ce3ce4c3c994d39 MD5 | raw file
  1. /*
  2. +----------------------------------------------------------------------+
  3. | Yet Another Framework |
  4. +----------------------------------------------------------------------+
  5. | This source file is subject to version 3.01 of the PHP license, |
  6. | that is bundled with this package in the file LICENSE, and is |
  7. | available through the world-wide-web at the following url: |
  8. | http://www.php.net/license/3_01.txt |
  9. | If you did not receive a copy of the PHP license and are unable to |
  10. | obtain it through the world-wide-web, please send a note to |
  11. | license@php.net so we can mail you a copy immediately. |
  12. +----------------------------------------------------------------------+
  13. | Author: Xinchen Hui <laruence@php.net> |
  14. +----------------------------------------------------------------------+
  15. */
  16. #ifdef HAVE_CONFIG_H
  17. #include "config.h"
  18. #endif
  19. #include "php.h"
  20. #include "php_ini.h"
  21. #include "main/SAPI.h"
  22. #include "Zend/zend_alloc.h"
  23. #include "ext/standard/info.h"
  24. #include "ext/standard/php_string.h"
  25. #include "php_yaf.h"
  26. #include "yaf_logo.h"
  27. #include "yaf_loader.h"
  28. #include "yaf_exception.h"
  29. #include "yaf_application.h"
  30. #include "yaf_dispatcher.h"
  31. #include "yaf_config.h"
  32. #include "yaf_view.h"
  33. #include "yaf_controller.h"
  34. #include "yaf_action.h"
  35. #include "yaf_request.h"
  36. #include "yaf_response.h"
  37. #include "yaf_router.h"
  38. #include "yaf_bootstrap.h"
  39. #include "yaf_plugin.h"
  40. #include "yaf_registry.h"
  41. #include "yaf_session.h"
  42. ZEND_DECLARE_MODULE_GLOBALS(yaf);
  43. /* {{{ yaf_functions[]
  44. */
  45. zend_function_entry yaf_functions[] = {
  46. {NULL, NULL, NULL}
  47. };
  48. /* }}} */
  49. /** {{{ PHP_INI_MH(OnUpdateSeparator)
  50. */
  51. PHP_INI_MH(OnUpdateSeparator) {
  52. YAF_G(name_separator) = new_value;
  53. YAF_G(name_separator_len) = new_value_length;
  54. return SUCCESS;
  55. }
  56. /* }}} */
  57. /** {{{ PHP_INI
  58. */
  59. PHP_INI_BEGIN()
  60. STD_PHP_INI_ENTRY("yaf.library", "", PHP_INI_ALL, OnUpdateString, global_library, zend_yaf_globals, yaf_globals)
  61. STD_PHP_INI_BOOLEAN("yaf.action_prefer", "0", PHP_INI_ALL, OnUpdateBool, action_prefer, zend_yaf_globals, yaf_globals)
  62. STD_PHP_INI_BOOLEAN("yaf.lowcase_path", "0", PHP_INI_ALL, OnUpdateBool, lowcase_path, zend_yaf_globals, yaf_globals)
  63. STD_PHP_INI_BOOLEAN("yaf.use_spl_autoload", "0", PHP_INI_ALL, OnUpdateBool, use_spl_autoload, zend_yaf_globals, yaf_globals)
  64. STD_PHP_INI_ENTRY("yaf.forward_limit", "5", PHP_INI_ALL, OnUpdateLongGEZero, forward_limit, zend_yaf_globals, yaf_globals)
  65. STD_PHP_INI_BOOLEAN("yaf.name_suffix", "1", PHP_INI_ALL, OnUpdateBool, name_suffix, zend_yaf_globals, yaf_globals)
  66. PHP_INI_ENTRY("yaf.name_separator", "", PHP_INI_ALL, OnUpdateSeparator)
  67. STD_PHP_INI_BOOLEAN("yaf.cache_config", "0", PHP_INI_SYSTEM, OnUpdateBool, cache_config, zend_yaf_globals, yaf_globals)
  68. /* {{{ This only effects internally */
  69. STD_PHP_INI_BOOLEAN("yaf.st_compatible", "0", PHP_INI_ALL, OnUpdateBool, st_compatible, zend_yaf_globals, yaf_globals)
  70. /* }}} */
  71. STD_PHP_INI_ENTRY("yaf.environ", "product", PHP_INI_SYSTEM, OnUpdateString, environ, zend_yaf_globals, yaf_globals)
  72. #ifdef YAF_HAVE_NAMESPACE
  73. STD_PHP_INI_BOOLEAN("yaf.use_namespace", "0", PHP_INI_SYSTEM, OnUpdateBool, use_namespace, zend_yaf_globals, yaf_globals)
  74. #endif
  75. PHP_INI_END();
  76. /* }}} */
  77. /** {{{ PHP_GINIT_FUNCTION
  78. */
  79. PHP_GINIT_FUNCTION(yaf)
  80. {
  81. yaf_globals->autoload_started = 0;
  82. yaf_globals->configs = NULL;
  83. yaf_globals->directory = NULL;
  84. yaf_globals->local_library = NULL;
  85. yaf_globals->ext = YAF_DEFAULT_EXT;
  86. yaf_globals->view_ext = YAF_DEFAULT_VIEW_EXT;
  87. yaf_globals->default_module = YAF_ROUTER_DEFAULT_MODULE;
  88. yaf_globals->default_controller = YAF_ROUTER_DEFAULT_CONTROLLER;
  89. yaf_globals->default_action = YAF_ROUTER_DEFAULT_ACTION;
  90. yaf_globals->bootstrap = YAF_DEFAULT_BOOTSTRAP;
  91. yaf_globals->modules = NULL;
  92. yaf_globals->default_route = NULL;
  93. yaf_globals->suppressing_warning = 0;
  94. }
  95. /* }}} */
  96. /** {{{ PHP_MINIT_FUNCTION
  97. */
  98. PHP_MINIT_FUNCTION(yaf)
  99. {
  100. REGISTER_INI_ENTRIES();
  101. #if PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION < 5
  102. php_register_info_logo(YAF_LOGO_GUID, YAF_LOGO_MIME_TYPE, yaf_logo, sizeof(yaf_logo));
  103. #endif
  104. #ifdef YAF_HAVE_NAMESPACE
  105. if(YAF_G(use_namespace)) {
  106. REGISTER_STRINGL_CONSTANT("YAF\\VERSION", PHP_YAF_VERSION, sizeof(PHP_YAF_VERSION) - 1, CONST_PERSISTENT | CONST_CS);
  107. REGISTER_STRINGL_CONSTANT("YAF\\ENVIRON", YAF_G(environ), strlen(YAF_G(environ)), CONST_PERSISTENT | CONST_CS);
  108. REGISTER_LONG_CONSTANT("YAF\\ERR\\STARTUP_FAILED", YAF_ERR_STARTUP_FAILED, CONST_PERSISTENT | CONST_CS);
  109. REGISTER_LONG_CONSTANT("YAF\\ERR\\ROUTE_FAILED", YAF_ERR_ROUTE_FAILED, CONST_PERSISTENT | CONST_CS);
  110. REGISTER_LONG_CONSTANT("YAF\\ERR\\DISPATCH_FAILED", YAF_ERR_DISPATCH_FAILED, CONST_PERSISTENT | CONST_CS);
  111. REGISTER_LONG_CONSTANT("YAF\\ERR\\AUTOLOAD_FAILED", YAF_ERR_AUTOLOAD_FAILED, CONST_PERSISTENT | CONST_CS);
  112. REGISTER_LONG_CONSTANT("YAF\\ERR\\NOTFOUND\\MODULE", YAF_ERR_NOTFOUND_MODULE, CONST_PERSISTENT | CONST_CS);
  113. REGISTER_LONG_CONSTANT("YAF\\ERR\\NOTFOUND\\CONTROLLER",YAF_ERR_NOTFOUND_CONTROLLER, CONST_PERSISTENT | CONST_CS);
  114. REGISTER_LONG_CONSTANT("YAF\\ERR\\NOTFOUND\\ACTION", YAF_ERR_NOTFOUND_ACTION, CONST_PERSISTENT | CONST_CS);
  115. REGISTER_LONG_CONSTANT("YAF\\ERR\\NOTFOUND\\VIEW", YAF_ERR_NOTFOUND_VIEW, CONST_PERSISTENT | CONST_CS);
  116. REGISTER_LONG_CONSTANT("YAF\\ERR\\CALL_FAILED", YAF_ERR_CALL_FAILED, CONST_PERSISTENT | CONST_CS);
  117. REGISTER_LONG_CONSTANT("YAF\\ERR\\TYPE_ERROR", YAF_ERR_TYPE_ERROR, CONST_PERSISTENT | CONST_CS);
  118. } else {
  119. #endif
  120. REGISTER_STRINGL_CONSTANT("YAF_VERSION", PHP_YAF_VERSION, sizeof(PHP_YAF_VERSION) - 1, CONST_PERSISTENT | CONST_CS);
  121. REGISTER_STRINGL_CONSTANT("YAF_ENVIRON", YAF_G(environ),strlen(YAF_G(environ)), CONST_PERSISTENT | CONST_CS);
  122. REGISTER_LONG_CONSTANT("YAF_ERR_STARTUP_FAILED", YAF_ERR_STARTUP_FAILED, CONST_PERSISTENT | CONST_CS);
  123. REGISTER_LONG_CONSTANT("YAF_ERR_ROUTE_FAILED", YAF_ERR_ROUTE_FAILED, CONST_PERSISTENT | CONST_CS);
  124. REGISTER_LONG_CONSTANT("YAF_ERR_DISPATCH_FAILED", YAF_ERR_DISPATCH_FAILED, CONST_PERSISTENT | CONST_CS);
  125. REGISTER_LONG_CONSTANT("YAF_ERR_AUTOLOAD_FAILED", YAF_ERR_AUTOLOAD_FAILED, CONST_PERSISTENT | CONST_CS);
  126. REGISTER_LONG_CONSTANT("YAF_ERR_NOTFOUND_MODULE", YAF_ERR_NOTFOUND_MODULE, CONST_PERSISTENT | CONST_CS);
  127. REGISTER_LONG_CONSTANT("YAF_ERR_NOTFOUND_CONTROLLER", YAF_ERR_NOTFOUND_CONTROLLER, CONST_PERSISTENT | CONST_CS);
  128. REGISTER_LONG_CONSTANT("YAF_ERR_NOTFOUND_ACTION", YAF_ERR_NOTFOUND_ACTION, CONST_PERSISTENT | CONST_CS);
  129. REGISTER_LONG_CONSTANT("YAF_ERR_NOTFOUND_VIEW", YAF_ERR_NOTFOUND_VIEW, CONST_PERSISTENT | CONST_CS);
  130. REGISTER_LONG_CONSTANT("YAF_ERR_CALL_FAILED", YAF_ERR_CALL_FAILED, CONST_PERSISTENT | CONST_CS);
  131. REGISTER_LONG_CONSTANT("YAF_ERR_TYPE_ERROR", YAF_ERR_TYPE_ERROR, CONST_PERSISTENT | CONST_CS);
  132. #ifdef YAF_HAVE_NAMESPACE
  133. }
  134. #endif
  135. /* startup components */
  136. YAF_STARTUP(application);
  137. YAF_STARTUP(bootstrap);
  138. YAF_STARTUP(dispatcher);
  139. YAF_STARTUP(loader);
  140. YAF_STARTUP(request);
  141. YAF_STARTUP(response);
  142. YAF_STARTUP(controller);
  143. YAF_STARTUP(action);
  144. YAF_STARTUP(config);
  145. YAF_STARTUP(view);
  146. YAF_STARTUP(router);
  147. YAF_STARTUP(plugin);
  148. YAF_STARTUP(registry);
  149. YAF_STARTUP(session);
  150. YAF_STARTUP(exception);
  151. return SUCCESS;
  152. }
  153. /* }}} */
  154. /** {{{ PHP_MSHUTDOWN_FUNCTION
  155. */
  156. PHP_MSHUTDOWN_FUNCTION(yaf)
  157. {
  158. UNREGISTER_INI_ENTRIES();
  159. if (YAF_G(configs)) {
  160. zend_hash_destroy(YAF_G(configs));
  161. pefree(YAF_G(configs), 1);
  162. }
  163. return SUCCESS;
  164. }
  165. /* }}} */
  166. /** {{{ PHP_RINIT_FUNCTION
  167. */
  168. PHP_RINIT_FUNCTION(yaf)
  169. {
  170. YAF_G(running) = 0;
  171. YAF_G(in_exception) = 0;
  172. YAF_G(throw_exception) = 1;
  173. YAF_G(catch_exception) = 0;
  174. YAF_G(directory) = NULL;
  175. YAF_G(bootstrap) = NULL;
  176. YAF_G(local_library) = NULL;
  177. YAF_G(local_namespaces) = NULL;
  178. YAF_G(modules) = NULL;
  179. YAF_G(base_uri) = NULL;
  180. YAF_G(view_directory) = NULL;
  181. #if ((PHP_MAJOR_VERSION == 5) && (PHP_MINOR_VERSION < 4))
  182. YAF_G(buffer) = NULL;
  183. YAF_G(owrite_handler) = NULL;
  184. YAF_G(buf_nesting) = 0;
  185. #endif
  186. return SUCCESS;
  187. }
  188. /* }}} */
  189. /** {{{ PHP_RSHUTDOWN_FUNCTION
  190. */
  191. PHP_RSHUTDOWN_FUNCTION(yaf)
  192. {
  193. if (YAF_G(directory)) {
  194. efree(YAF_G(directory));
  195. }
  196. if (YAF_G(local_library)) {
  197. efree(YAF_G(local_library));
  198. }
  199. if (YAF_G(local_namespaces)) {
  200. efree(YAF_G(local_namespaces));
  201. }
  202. if (YAF_G(bootstrap)) {
  203. efree(YAF_G(bootstrap));
  204. }
  205. if (YAF_G(modules)) {
  206. zval_ptr_dtor(&(YAF_G(modules)));
  207. }
  208. if (YAF_G(base_uri)) {
  209. efree(YAF_G(base_uri));
  210. }
  211. if (YAF_G(view_directory)) {
  212. efree(YAF_G(view_directory));
  213. }
  214. YAF_G(default_route) = NULL;
  215. return SUCCESS;
  216. }
  217. /* }}} */
  218. /** {{{ PHP_MINFO_FUNCTION
  219. */
  220. PHP_MINFO_FUNCTION(yaf)
  221. {
  222. php_info_print_table_start();
  223. if (PG(expose_php) && !sapi_module.phpinfo_as_text) {
  224. php_info_print_table_header(2, "yaf support", YAF_LOGO_IMG"enabled");
  225. } else {
  226. php_info_print_table_header(2, "yaf support", "enabled");
  227. }
  228. php_info_print_table_row(2, "Version", PHP_YAF_VERSION);
  229. php_info_print_table_row(2, "Supports", YAF_SUPPORT_URL);
  230. php_info_print_table_end();
  231. DISPLAY_INI_ENTRIES();
  232. }
  233. /* }}} */
  234. /** {{{ DL support
  235. */
  236. #ifdef COMPILE_DL_YAF
  237. ZEND_GET_MODULE(yaf)
  238. #endif
  239. /* }}} */
  240. /** {{{ module depends
  241. */
  242. #if ZEND_MODULE_API_NO >= 20050922
  243. zend_module_dep yaf_deps[] = {
  244. ZEND_MOD_REQUIRED("spl")
  245. ZEND_MOD_REQUIRED("pcre")
  246. ZEND_MOD_OPTIONAL("session")
  247. {NULL, NULL, NULL}
  248. };
  249. #endif
  250. /* }}} */
  251. /** {{{ yaf_module_entry
  252. */
  253. zend_module_entry yaf_module_entry = {
  254. #if ZEND_MODULE_API_NO >= 20050922
  255. STANDARD_MODULE_HEADER_EX, NULL,
  256. yaf_deps,
  257. #else
  258. STANDARD_MODULE_HEADER,
  259. #endif
  260. "yaf",
  261. yaf_functions,
  262. PHP_MINIT(yaf),
  263. PHP_MSHUTDOWN(yaf),
  264. PHP_RINIT(yaf),
  265. PHP_RSHUTDOWN(yaf),
  266. PHP_MINFO(yaf),
  267. PHP_YAF_VERSION,
  268. PHP_MODULE_GLOBALS(yaf),
  269. PHP_GINIT(yaf),
  270. NULL,
  271. NULL,
  272. STANDARD_MODULE_PROPERTIES_EX
  273. };
  274. /* }}} */
  275. /*
  276. * Local variables:
  277. * tab-width: 4
  278. * c-basic-offset: 4
  279. * End:
  280. * vim600: noet sw=4 ts=4 fdm=marker
  281. * vim<600: noet sw=4 ts=4
  282. */