Еще одна полезная функция взятая из фреймворка CodeIgniter.
Задача функции проста – получить составляющие запроса.
Например:
Наш сайт находится по адресу http://site.com/somedir/. Мы используем url_rewrite для получения красивых адресов. Все управление происходит через index.php. Производится запрос к адресу http://site.com/somedir/someaction/somemethod. Необходимо получить “someaction” и “somemethod”.
Код функции которая выполняет нашу задачу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | <?php /** * Example of use */ function testFunctionCall() { $result = get_request_action(); print_r($result); } /** * Get current action for selected query */ function get_request_action() { $action = parse_url(parse_request_uri()); $folder = explode('/', $action['path'], 4); $action = (isset($folder[1]) ? htmlspecialchars(strip_tags($folder[1])) : ''); $folder = (isset($folder[2]) ? htmlspecialchars(strip_tags($folder[2])) : ''); return array($action,$folder); } /** * Parsing request url and get uri with current server dir * @return <type> */ function parse_request_uri() { if ( ! isset($_SERVER['REQUEST_URI']) OR $_SERVER['REQUEST_URI'] == '') { return ''; } $request_uri = preg_replace("|/(.*)|", "\\1", str_replace("\\", "/", $_SERVER['REQUEST_URI'])); if ($request_uri == '' OR $request_uri == SELF) { return ''; } $fc_path = __FILE__; if (strpos($request_uri, '?') !== FALSE) { $fc_path .= '?'; } $parsed_uri = explode("/", $request_uri); $i = 0; foreach(explode("/", $fc_path) as $segment) { if (isset($parsed_uri[$i]) && $segment == $parsed_uri[$i]) { $i++; } } $parsed_uri = implode("/", array_slice($parsed_uri, $i)); if ($parsed_uri != '') { $parsed_uri = '/'.$parsed_uri; } return $parsed_uri; } ?> |
После вызова функции testFunctionCall() мы получим что то вроде
Array ( [0] => "someaction" [1] => "somemethod" )
