从URL路径中获取PHP参数

7
我有一个像这样的网址:
http://www.mysite.com/forum/board1/sub-forum/topics/123
有没有一种简单的PHP方法(不能使用HTAccess),可以提取该URL中的board1,sub-forum,topics和123,以便我可以将它们用于数据库等等?有没有内置函数,还是我必须编写自己的函数?
谢谢,
詹姆斯
4个回答

12
explode('/', getenv('REQUEST_URI'));

如果你的环境包含以上值的查询字符串部分,这里有一个巧妙的解决方法:

explode('/', strtok(getenv('REQUEST_URI'), '?'));

1
谢谢 :-) 我应该自己想到这个 - 非常简单! - Bojangles
@Gumbo 环境特定,我的情况只包括URI路径。为了清晰起见,我很快会包含第二个片段。 - pestaa
@Gumbo 请看一下。没法再短了,对吧? :) - pestaa
我已将此标记为正确答案,但是@nikc提出了关于404错误的非常好的观点。我将研究使用HTAccess文件,并在可能的情况下访问我的服务器上的mod_rewrite。感谢大家的帮助。 - Bojangles
在我的情况下,getenv('REQUEST_URI') 返回了一个带有前导斜杠的路径。我通过执行 ltrim(getenv('REQUEST_URI'), '/') 来解决这个问题。 - Mark Garcia
显示剩余9条评论

4

你可以这样做,但是如果不重定向请求,你的 web 服务器将只为不存在的路径返回 404 错误。

然而,你可以使用像 http://your.site.com/index.php/foo/bar/baz 这样的 URL,然后像 @pestaa 所说的那样将 URL 拆分成部分,然后解析为参数值。


路径是虚拟的 - 它们来自数据库并被构建。你的意思是导航到该路径会返回404,但仍然执行PHP吗? - Bojangles
不。我的意思是,除非您的Web服务器知道所有URL都应重定向到PHP脚本,否则它将查看文件系统上的相应路径,并在不存在时返回404错误。 - nikc.org
啊好的,谢谢你。我猜解决方法是使用HTAccess文件?我可能能够编辑mod_rewrite规则,但不要指望太多。 - Bojangles

2
这是从我的MVChttp://www.phpclasses.org/package/6363-PHP-实现MVC设计模式.html中获取的。
链接目前已过时,我刚刚更新了它,所以不再包含MVC内容,可以使用getLoadDetails($_URL)进行调用,其中$_URL与$_GET完全相同,除了它从文件夹路径获取数据。
function getLoadDetails(&$_URL){
            $filePath = $_SERVER['REQUEST_URI'];
            $filePath = explode("/", $filePath);

            for($i = 0; $i < count($filePath); $i++){
                    $key = $filePath[$i];
                    $i++;
                    $val = $filePath[$i];
                    $keyName = urldecode($key);
                    $_URL[$keyName] = urldecode($val);
            }
    }

我有一个问题,如果你不能使用HTACCESS,你打算如何处理文件夹路径?请不要告诉我你的系统会为每个URL创建文件夹路径和索引文件,那会拖慢你的服务器速度,并且你的主机也会因此而讨厌你。


不,那太疯狂了!创建所有目录只是疯狂的行为。正如我在其他评论中提到的,我将使用HTAccess和可能的mod_rewrite。感谢您的帮助。 - Bojangles

1
如果您已经配置了您的Web服务器将这些请求发送到特定的PHP文件,您可以使用parse_urlexplode来获取并分割所请求的URI路径的各个部分:
$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$pathSegments = explode('/', $_SERVER['REQUEST_URI_PATH']);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接