【问题标题】:PHP take arguments from URL pathPHP 从 URL 路径获取参数
【发布时间】:2010-11-18 10:49:26
【问题描述】:

假设我有一个这样的网址:

http://www.mysite.com/forum/board1/sub-forum/topics/123

在 PHP(不能使用 HTAccess)中是否有一种简单的方法来获取该 URL 并提取 board1sub-forumtopics123,以便我可以在数据库中使用它们?是否有任何内置函数或者我必须自己编写函数?

谢谢,

詹姆斯

【问题讨论】:

    标签: php url


    【解决方案1】:
    explode('/', getenv('REQUEST_URI'));
    

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

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

    【讨论】:

    • 谢谢 :-) 我自己应该想到的 - 很简单!
    • @Gumbo 这不是必需的。将这个数组与 $_GET 合并也不难。
    • @pestaa:但 REQUEST_URI 不仅包含请求 URI 路径,还包含查询字符串。
    • @Gumbo 特定环境,我的恰好只包含 URI 路径。为清楚起见,我将很快包含第二个 sn-p。
    • @Gumbo 请看一下。 不能更短,对吧? :)
    【解决方案2】:

    您可以,但如果不重定向请求,您的网络服务器只会为不存在的路径返回 404 错误。

    但是,您可以使用http://your.site.com/index.php/foo/bar/baz 之类的网址,然后将网址拆分为@pestaa 所说的部分,然后您可以将其解析为参数值。

    【讨论】:

    • 嗯,路径是虚拟的——它们是从数据库中获取并构建的。您是说导航到该路径会返回 404,但仍会执行 PHP?
    • 没有。我的意思是,除非您的网络服务器知道所有 url 都应该重定向到 PHP 脚本,否则它将查看文件系统上的相应路径并在不存在时返回 404 错误。
    • 啊,好的,谢谢。我认为解决方案是使用 HTAccess 文件?我也许能够编辑 mod_rewrite 规则,但不要指望它。
    【解决方案3】:

    这是取自我的 MVC http://www.phpclasses.org/package/6363-PHP-Implements-the-MVC-design-pattern.html

    这个链接现在已经过时了,我刚刚更新了它,所以它没有 MVC 的东西,这可以用 getLoadDetails($_URL); 调用。 amd $_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 创建文件夹路径和索引文件,这会破坏您的服务器速度和你的主人会因此恨你的。

    【讨论】:

    • 不不——那太疯狂了!创建所有目录简直是疯了。正如我在其他 cmets 中提到的,我将使用 HTAccess 和可能的 mod_rewrite。感谢您的帮助。
    【解决方案4】:

    如果您已经将 Web 服务器配置为将这些请求发送到您的特定 PHP 文件,则可以使用 parse_urlexplode 获取请求的 URI 路径,然后将其拆分为多个段:

    $_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $pathSegments = explode('/', $_SERVER['REQUEST_URI_PATH']);
    

    【讨论】:

      猜你喜欢
      • 2018-11-13
      • 2015-11-15
      • 1970-01-01
      • 2023-03-13
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 2014-03-26
      相关资源
      最近更新 更多