Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- error_reporting(E_ALL);
- require 'include/autoload.php';
- $root = dirname($_SERVER['SCRIPT_NAME']);
- if ($root == '/') {
- $root = '';
- }
- // константа содержит путь от корня до обработчика
- define('ROOT', $root);
- define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
- $routes = array();
- // только GET
- $routes['/(:any).htm'] = 'custom_page';
- $routes['/admin']
- // все методы поддерживаются
- $routes['/test_ajax'] = 'test_ajax';
- process_routes($routes);
- function custom_page($alias) {
- // $db = DB::getInstance();
- var_dump($alias);
- }
- function test_ajax() {
- var_dump(IS_AJAX);
- }
- function page404() {
- header($_SERVER['SERVER_PROTOCOL'] . ' 404 Page Not Found');
- echo 'Page Not Found';
- }
- function process_routes($routes) {
- $placeholders = array(
- 'any' => '.*?',
- 'id' => '\d|[1-9]\d+',
- 'num' => '\d+',
- );
- $split_re = '/\(:(' . implode('|', array_keys($placeholders)) . ')\)/i';
- // берем только путь из $_SERVER['REQUEST_URI']
- $path = preg_replace('/(\?.*)?/', '', $_SERVER['REQUEST_URI']);
- // убираем повторы слешей
- $path = preg_replace('~/{2,}~', '/', $path);
- // декодируем путь
- $path = urldecode(substr($path, strlen(ROOT)));
- foreach ($routes as $k => $f) {
- preg_match('/(?:(.*?) )?(.*)/', $k, $matches);
- $method = $matches[1];
- $rule = $matches[2];
- if ($method == '' || $method == $_SERVER['REQUEST_METHOD']) {
- $pieces = preg_split($split_re, $rule, -1, PREG_SPLIT_DELIM_CAPTURE);
- // не содержит плейсхолдеров
- if (count($pieces) == 1) {
- if ($path == $pieces[0]) {
- return $f(); // call_user_func($f);
- }
- }
- // собираем регулярку
- else {
- $re = '/^';
- $total = count($pieces);
- for ($i = 0;;) {
- $re .= preg_quote($pieces[$i++], '/');
- if ($i == $total) {
- break;
- }
- $re .= '(' . $placeholders[$pieces[$i++]] . ')';
- }
- $re .= '$/';
- if (preg_match($re, $path, $matches)) {
- return call_user_func_array($f, array_slice($matches, 1));
- }
- }
- }
- }
- page404();
- }
Advertisement
Add Comment
Please, Sign In to add comment