1

此脚本应检测完整路径中的最后一部分,以及是否stackoverflow输出ok

$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 的最后一部分?

4

5 回答 5

5
if (preg_match("#stackoverflow/$#", $_SERVER['REQUEST_URI'])) {

    echo 'ok';
}
于 2012-04-14T22:44:39.687 回答
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';
    }
}
于 2012-04-14T22:40:33.550 回答
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
    }

?>
于 2012-04-14T23:13:58.730 回答
1

我认为使用 ofbasename()explode(). basename()无论是否有斜杠,函数都将返回 url 的最后一部分。

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

希望这会有所帮助。

于 2012-04-14T23:42:16.417 回答
0

请注意,如果输入字符串中的尾随字符与分隔符(边界)字符串匹配,explode()则会生成最后一项为空字符串的数组。因此,您的示例 3 将输出ok.

www.myserver.ext/something/else/stackoverflow/foo/将输出not ok.

满足您的需求的最短方法是:

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

ok仅当 url 以 . 结尾时才会回显/stackoverflow/

于 2012-04-14T23:22:10.660 回答