我在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
,但这并没有解决问题。
我该如何解决这个问题?
答案 0 :(得分:6)
PATH_INFO
未定义,请参见此处:What exactly is PATH_INFO in PHP?
因此,如果你这样做:GET /foo/bar.php?query=foo
那么PATH_INFO
将是未定义的。
如果您执行此操作:GET /foo/bar.php/baz?query=foo
则PATH_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)