我在$ _SERVER中没有PATH_INFO

时间:2013-07-14 00:59:07

标签: php

我在Windows 7,Apache 2.2.22版本和PHP版本5.3.13上使用WampServer版本2.2。

我尝试在请求文件中使用$this->url = $_SERVER['PATH_INFO'];, 我收到了这个错误:

  

注意:未定义的索引:第8行的C:\ wamp \ www \ site \ core \ Request.php中的PATH_INFO

我尝试配置httpd.conf文件以添加AcceptPathInfo On 对于php.ini中的PHP,我添加了cgi.fix_pathinfo = 1,但这并没有解决问题。

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:6)

如果您没有使用URL重写(或者更确切地说:将您的PHP文件作为目录引用),则

PATH_INFO未定义,请参见此处:What exactly is PATH_INFO in PHP?

因此,如果你这样做:GET /foo/bar.php?query=foo那么PATH_INFO将是未定义的。

如果您执行此操作:GET /foo/bar.php/baz?query=fooPATH_INFO将被定义为/baz

答案 1 :(得分:2)

  

例如 ROOT = 'C:\wamp\www\mySite'

如果您使用此代码,可能会对您获得相同的结果( $_SERVER['PATH_INFO'] )有所帮助:

<?php
    class App{
        public static function get__PATH_INFO($path){
            $path_elements = explode("/", $path);
            $tempPI = "";
            if (isset($path_elements[2])){
                for ($i = 2 ;$i < count($path_elements); $i++ )
                    $tempPI .= "/".$path_elements[$i];
            }
            return $tempPI;
        }
    }
?>

然后在另一个文件中调用 get__PATH_INFO() 函数:

$path_info = App::get__PATH_INFO($_SERVER['REQUEST_URI']);

答案 2 :(得分:0)

您可以使用此代替$ _SERVER [&#39; PATH_INFO&#39;](它为我工作)

  

$ _ SERVER [&#39; PATH_INFO&#39;]是&#39; PATH_INFO&#39;的原始版本。在由PHP处理之前。

$_SERVER['ORIG_PATH_INFO']

OR:

$Path_Info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (isset($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : '');

答案 3 :(得分:0)

刚遇到同样的问题,对于localhost,没有PATH_INFO。但有一种方法可以使用PHP parse_url函数使其工作(参见PHP: parse_url - documentation

parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)

如果您将其用于https://example.org/example#stuff?q=1,则会返回/example

答案 4 :(得分:0)

尝试使用explode('?',$_SERVER['REQUEST_URI'])[0]

答案 5 :(得分:-1)

如果您将网址称为http://localhost/,则

$ _ SERVER [&#39; PATH_INFO&#39;]不可用。

如果您将此脚本上传到服务器并按其名称调用,则该变量将自动变为可用。