2012-04-14 3 views
1

Этот скрипт должен обнаружить последнюю часть в полном пути, и если это stackoverflow выход okЛучший способ прочитать последнюю часть URL

$current_url = $_SERVER['REQUEST_URI']; 

$current_url_arr = explode('/',$current_url); 
$count = count($current_url_arr); 

if($current_url_arr[$count-2] == 'stackoverflow'){ 
    echo 'ok'; 
} 
else { 
    echo 'not ok'; 
} 

Пример 1: www.myserver.ext/something/else/stackoverflow/ Выход: ok


Пример 2: www.myserver.ext/something/else/stackoverflow Выход: not ok


Пример 3: www.myserver.ext/something/else/stackoverflow/foo Выход: not ok


Я надеюсь, что вы понимаете идею. Этот скрипт отлично работает, но мне интересно, есть ли лучший, элегантный способ прочитать последнюю часть URL-адреса?

ответ

3

Да! Там в $_SERVER['PATH_INFO']:

if(isset($_SERVER['PATH_INFO'])) { 
    $info = explode('/', trim($_SERVER['PATH_INFO'], '/')); 

    if($info[count($info) - 1] === 'stackoverflow') { 
     echo 'ok'; 
    } else { 
     echo 'not ok'; 
    } 
} 
5
if (preg_match("#stackoverflow/$#", $_SERVER['REQUEST_URI'])) { 

    echo 'ok'; 
} 
+1

Он будет эхом 'ok' также в случае' .../foobarstackoverflow/'. См. Мой ответ. – bostaf

1

Я думаю, что это будет лучшим способом:

<?php 

    $url = "www.myserver.ext/something/else/stackoverflow/"; 

    $fullpath = parse_url($url, PHP_URL_PATH); 
    $paths = explode("/", $fullpath); 
    $path = $paths[sizeof($paths)-1]; 

    if ($path === "stackoverflow") { 
     # Condition satisfied 
    } 

?> 
+0

Он работает только в случае URL-адреса, который заканчивается '/ stackoverflow'. Это не работает с вашим примером url. См. Мой ответ для разъяснения. – bostaf

+0

@Struna, если вы добавите '$ paths = explode ("/", $ fullpath, (sizeof ($ paths) -2));' после первого взрыва, который должен помешать последнему "/" удалить строку , поэтому вы получите последнее имя папки + "/". – Ozzy

0

Пожалуйста, обратите внимание, что если конечные символы в строке ввода будет соответствовать разделителю (граница) строка, explode() будет производить массив en с последним элементом, являющимся пустой строкой. Таким образом, ваш пример 3 выведет ok.

www.myserver.ext/something/else/stackoverflow/foo/ будет выводить not ok.

Самый короткий путь для достижения ваших потребностей является:

if (preg_match("#/stackoverflow/$#", $_SERVER['REQUEST_URI'])) { 
    echo 'ok'; 
} 

Это эхо ok только если URL заканчивается /stackoverflow/.

1

Я думаю, что использование basename() - лучшая идея, чем explode(). basename() Функция вернет последнюю часть URL-адреса, есть ли завершающая косая черта или нет.

<?php 
$uri = $_SERVER['REQUEST_URI']; 
if(basename($uri) == 'stackoverflow') { 
    echo 'ok'; 
} else { 
    echo 'not ok'; 
} 
?> 

Надеюсь, это поможет.

Смежные вопросы