stuppid_bot

Untitled

Feb 25th, 2014
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. <?php
  2.  
  3. error_reporting(E_ALL);
  4. require 'include/autoload.php';
  5. $root = dirname($_SERVER['SCRIPT_NAME']);
  6. if ($root == '/') {
  7. $root = '';
  8. }
  9. // константа содержит путь от корня до обработчика
  10. define('ROOT', $root);
  11. define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
  12. $routes = array();
  13. // только GET
  14. $routes['/(:any).htm'] = 'custom_page';
  15. $routes['/admin']
  16. // все методы поддерживаются
  17. $routes['/test_ajax'] = 'test_ajax';
  18. process_routes($routes);
  19.  
  20. function custom_page($alias) {
  21. // $db = DB::getInstance();
  22. var_dump($alias);
  23. }
  24.  
  25. function test_ajax() {
  26. var_dump(IS_AJAX);
  27. }
  28.  
  29. function page404() {
  30. header($_SERVER['SERVER_PROTOCOL'] . ' 404 Page Not Found');
  31. echo 'Page Not Found';
  32. }
  33.  
  34. function process_routes($routes) {
  35. $placeholders = array(
  36. 'any' => '.*?',
  37. 'id' => '\d|[1-9]\d+',
  38. 'num' => '\d+',
  39. );
  40. $split_re = '/\(:(' . implode('|', array_keys($placeholders)) . ')\)/i';
  41. // берем только путь из $_SERVER['REQUEST_URI']
  42. $path = preg_replace('/(\?.*)?/', '', $_SERVER['REQUEST_URI']);
  43. // убираем повторы слешей
  44. $path = preg_replace('~/{2,}~', '/', $path);
  45. // декодируем путь
  46. $path = urldecode(substr($path, strlen(ROOT)));
  47. foreach ($routes as $k => $f) {
  48. preg_match('/(?:(.*?) )?(.*)/', $k, $matches);
  49. $method = $matches[1];
  50. $rule = $matches[2];
  51. if ($method == '' || $method == $_SERVER['REQUEST_METHOD']) {
  52. $pieces = preg_split($split_re, $rule, -1, PREG_SPLIT_DELIM_CAPTURE);
  53. // не содержит плейсхолдеров
  54. if (count($pieces) == 1) {
  55. if ($path == $pieces[0]) {
  56. return $f(); // call_user_func($f);
  57. }
  58. }
  59. // собираем регулярку
  60. else {
  61. $re = '/^';
  62. $total = count($pieces);
  63. for ($i = 0;;) {
  64. $re .= preg_quote($pieces[$i++], '/');
  65. if ($i == $total) {
  66. break;
  67. }
  68. $re .= '(' . $placeholders[$pieces[$i++]] . ')';
  69. }
  70. $re .= '$/';
  71. if (preg_match($re, $path, $matches)) {
  72. return call_user_func_array($f, array_slice($matches, 1));
  73. }
  74. }
  75. }
  76. }
  77. page404();
  78. }
Advertisement
Add Comment
Please, Sign In to add comment