【问题标题】:what is the difference between $_SERVER['REQUEST_URI'] and $_GET['q']?$_SERVER['REQUEST_URI'] 和 $_GET['q'] 有什么区别?
【发布时间】:2011-06-11 11:24:38
【问题描述】:

$_SERVER['REQUEST_URI']$_GET['q'](在 Drupal 中使用)有什么区别?

【问题讨论】:

  • 嗯..他们是两个完全不同的东西?我认为您需要添加一些上下文

标签: php drupal


【解决方案1】:

鉴于此示例网址:

http://www.example.com/some-dir/yourpage.php?q=bogus&n=10

$_SERVER['REQUEST_URI']会给你:

/some-dir/yourpage.php?q=bogus&n=10

$_GET['q'] 会给你:

bogus

换句话说,$_SERVER['REQUEST_URI'] 将保存包括querystring 在内的完整请求路径。而$_GET['q'] 将在查询字符串中为您提供参数q 的值。

【讨论】:

  • 在 Drupal 上下文之外,您的答案是正确的,但是在 Drupal 7 $_GET['q'] 中,将实际路径(不是别名)存储在 Drupal 基本文件夹之后。它的功能与current_path() 相同,参见api.drupal.org/api/drupal/includes%21path.inc/function/… 在Drupal 8 中已删除。
【解决方案2】:

在 Drupal 的上下文中,区别将取决于干净的 URL 是否打开。

关闭它们后,$_SERVER['REQUEST_URI'] 将拥有称为 w//index.php 的页面的完整路径,而 $_GET["q"] 将仅拥有分配给 q 的内容。

启用它们后,它们将几乎相同,但没有其他参数,但 $_GET["q"] 将缺少前导 /。查看默认 .htaccess 的末尾以了解发生了什么。如果将其他参数传递到页面中,它们也会有所不同,例如当寻呼机处于活动状态时。

【讨论】:

  • 这是解决问题最初原因的唯一答案(网址重写);而不是仅仅给出相当明显的 php superglobals 定义。不要误会我的意思,其他答案本身非常正确,但这个答案提供了问题的一些背景知识,真的应该得到更多的支持!
【解决方案3】:

PHP 手册很好地解释了两者:

http://php.net/manual/en/reserved.variables.server.php#REQUEST_URI

http://php.net/manual/en/reserved.variables.get.php # 用于 $_GET["q"] 变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多