【问题标题】:What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']?$_SERVER['PATH_INFO'] 和 $_SERVER['ORIG_PATH_INFO'] 有什么区别?
【发布时间】:2011-04-12 02:18:55
【问题描述】:

$_SERVER['PATH_INFO']$_SERVER['ORIG_PATH_INFO'] 有什么区别?我该如何使用它们?

当我运行print_r($_SERVER) 时,数组中不存在PATH_INFOORIG_PATH_INFO。为什么不?如何启用它们?

我已经阅读了关于它们的 PHP 手册,但仍然不明白。

【问题讨论】:

    标签: php apache


    【解决方案1】:

    PATH_INFO 变量仅在您调用这样的 PHP 脚本时出现:

    http://www.example.com/phpinfo.php/HELLO_THERE
    

    这只是.php 脚本之后的/HELLO_THERE 部分。如果你不这样调用 URL,就不会有$_SERVER["PATH_INFO"] 环境变量。

    PORIG_ 前缀有点不常见。 PATH_INFO 是一个标准的 CGI 环境变量,不应该有前缀。你在哪里读到的? (如果您通过 cgi-bin/ 调用 PHP 解释器,PHP3/PHP4 会出现一些问题 - 但今天几乎没有人有这样的设置。)

    供参考:http://www.ietf.org/rfc/rfc3875

    【讨论】:

    • 我认为应该是ORIG_PATH_INFO。似乎某些服务器配置创建了这个而不是 PATH_INFO
    • 那么它肯定是一个 CGI 处理程序设置。 PHP 在某些设置中会使用 PATH_INFO 而不是 SCRIPT_FILENAME,因此服务器很可能配置为使用 path_info 的替代名称。
    • php.net/manual/en/reserved.variables.server.php: ORIG_PATH_INFO: > 'PATH_INFO' 在 PHP 处理前的原始版本。
    【解决方案2】:

    试试这个:

    $path_info = !empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (!empty($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : '');
    

    【讨论】:

      【解决方案3】:

      PATH_INFO 和 ORIG_PATH_INFO 很少使用。这些指的是请求路径中的任何内容(从第一个 / 开始的 URL 部分),位于文件名和查询字符串之后。通常,您不会在 URL 中包含 PATH_INFO。

      我猜你的意思是 ORIG_PATH_INFO 而不是 PORIG_PATH_INFO。路径信息可能由 mod_rewrite 和 PHP 脚本本身等操作。 ORIG_PATH_INFO 是原始请求中的 PATH_INFO,在对字符串进行任何重写或其他操作之前。

      【讨论】:

      • PATH_INFO 在 Symfony 和 ZF 中都使用过,所以我不会称它为“很少使用”
      • 只是补充一点,因为我需要使用 PATH_INFO 并且被 PATH_INFO 误导了一点,显然没有那么多使用。基于 WordPress 在内部使用:github.com/WordPress/WordPress/blob/4.4.4/wp-includes/…。公平地说,它已被使用 an awful lot,所以如果需要,请使用它!
      • "...位于文件名和查询字符串之后。" - 请注意,PATH_INFO 出现在查询字符串之前,而不是之后。
      • ORIG_PATH_INFO 也用于 Agavi (AgaviWebRequest.class.php)。
      【解决方案4】:

      在 5.2.4 之前,PATH_INFO 在默认配置中显然已损坏(未设置)。也许就是这样。

      https://bugs.php.net/bug.php?id=31892

      PHP 手册说ORIG_PATH_INFO 是:

      PHP 处理前的“PATH_INFO”的原始版本。

      参考:
      http://php.net/manual/en/reserved.variables.server.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 2011-09-22
        • 2011-11-05
        • 1970-01-01
        • 2013-01-21
        • 2020-12-20
        • 1970-01-01
        相关资源
        最近更新 更多