此脚本应检测完整路径中的最后一部分,如果是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的最后部分?
答案 0 :(得分:5)
if (preg_match("#stackoverflow/$#", $_SERVER['REQUEST_URI'])) {
echo 'ok';
}
答案 1 :(得分: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';
}
}
答案 2 :(得分: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
}
?>
答案 3 :(得分:1)
我认为使用basename()
比explode()
更好。 basename()
函数将返回url的最后一部分是否有尾部斜杠。
<?php
$uri = $_SERVER['REQUEST_URI'];
if(basename($uri) == 'stackoverflow') {
echo 'ok';
} else {
echo 'not ok';
}
?>
希望这会有所帮助。
答案 4 :(得分:0)
请注意,如果输入字符串中的尾随字符与分隔符(边界)字符串匹配,explode()
将生成en数组,其中最后一项为空字符串。因此,示例3将输出ok
。
www.myserver.ext/something/else/stackoverflow/foo/
将输出not ok
。
实现您需求的最短途径是:
if (preg_match("#/stackoverflow/$#", $_SERVER['REQUEST_URI'])) {
echo 'ok';
}
仅当网址以ok
结尾时才会显示/stackoverflow/
。