PHP获取变量“/”而不是“?”`
我使用的脚本不允许URL中有PHP获取变量“/”而不是“?”`,php,variables,get,Php,Variables,Get,我使用的脚本不允许URL中有$\u GET[]变量(这是我提供的参考URL,我需要有一些方法来跟踪它)。例如,我不能使用domain.com/index.php?id=test。但是我可以这样做domain.com/index.php/idd=test 我的问题是,我是否使用/而不是?并将其视为get变量。如何从url获取变量。做这件事的简单方法是什么 $segments = explode("/", $_SERVER['REQUEST_URI']); 然后你从那里决定。来自$segments
$\u GET[]
变量(这是我提供的参考URL,我需要有一些方法来跟踪它)。例如,我不能使用domain.com/index.php?id=test
。但是我可以这样做domain.com/index.php/idd=test
我的问题是,我是否使用/
而不是?
并将其视为get变量。如何从url获取变量。做这件事的简单方法是什么
$segments = explode("/", $_SERVER['REQUEST_URI']);
然后你从那里决定。来自$segments的每个结果都可以以相同的方式进行操作。例如,您可以选择执行id=test或仅执行id,并且始终知道$segments[2]是id。你的电话
不过,你绝对应该研究一下mod_重写。您需要将调用重定向到一个文件,因为如果不允许获取vars,此方法将不允许任何超过.php的内容。(假设通过某些配置?和更高版本未读取)
基本上,如果index.php是您的一个控制器,请将所有内容重新路由到index.php。您可以这样解析它:
$uriParts = array_reverse((array) explode('/', $_SERVER['REQUEST_URI']));
$GET = explode('=', $uriParts[0]); // however you wanted to parse it form here
//get rid of "/index.php
$uri = substr($_SERVER['REQUEST_URI'], 11);
//explode incase there are other parameters
$arr = explode('&', $uri);
$token = array();
foreach($token as $t){
$part = explode('=', $t);
$token[$part[0]] = $part[1]
}
http://example.com/index.php/whatever
按照您的意愿处理它,只需知道
$uriParts[0]
将包含id=whatever
您需要做的是解析$\u服务器['REQUEST\u URI']
,然后对其执行您需要的操作
从您的示例中,您需要以下内容:
$uriParts = array_reverse((array) explode('/', $_SERVER['REQUEST_URI']));
$GET = explode('=', $uriParts[0]); // however you wanted to parse it form here
//get rid of "/index.php
$uri = substr($_SERVER['REQUEST_URI'], 11);
//explode incase there are other parameters
$arr = explode('&', $uri);
$token = array();
foreach($token as $t){
$part = explode('=', $t);
$token[$part[0]] = $part[1]
}
http://example.com/index.php/whatever
如果您有如下URL:
$uriParts = array_reverse((array) explode('/', $_SERVER['REQUEST_URI']));
$GET = explode('=', $uriParts[0]); // however you wanted to parse it form here
//get rid of "/index.php
$uri = substr($_SERVER['REQUEST_URI'], 11);
//explode incase there are other parameters
$arr = explode('&', $uri);
$token = array();
foreach($token as $t){
$part = explode('=', $t);
$token[$part[0]] = $part[1]
}
http://example.com/index.php/whatever
然后,/which
通常被称为并可用为:
print $_SERVER["PATH_INFO"]
请注意,当实际路径信息不存在时,某些环境(CGI)可以将其设置为占位符值(请求uri)。(另请参阅关于环境变量的PHP手册以及关于PATH_信息和PATH_翻译的注释。)
应该填充$\u-GET。没有“简单”的方法来替换$\u-GET参数的全部功能,但至少在Apache下,存在一些棘手的问题。鉴于您不能使用$_GET参数,我假设您也没有mod_rewrite的权限,但谁知道呢
像http://www.example.com/index.php/foo/bar/baz
将在$\u服务器超全局中生成以下项目:
[REQUEST_URI] => /index.php/foo/bar/baz
[SCRIPT_NAME] => /index.php
[PATH_INFO] => /foo/bar/baz
理论上,您可以通过在“/”上拆分、在该数组中循环并在“=”上拆分来解析$\u服务器['PATH\u INFO'”(假设您仍然要使用key=value结构)
但是,请注意,不稳定的URL结构的一个副作用是,文档中的相对链接将成为不稳定URL的相对链接,因此
将尝试加载http://www.example.com/index.php/foo/bar/images/myimage.jpg
这可以通过使用绝对URL(http://www.example.com/images/myimage.jpg
)或根相对URL(/images/myimage.jpg
)
但基本上,你要求的是一个充满麻烦和故障排除的世界。查找方法。首先想到的是使用POST而不是GET?第二个想法是使用$\u服务器['REQUEST\u URI'],并进行一些创造性的解析编辑——或者如果你可以使用mod_rewrite,那么就按照@bradcristie的建议。我不认为$u POST是一个可行的选择。如果他指的是somedomain.com/index/category/idI之类的东西,我需要使用get。这是一个推荐人的网址,我给了,我需要有一些方法来跟踪它。Post将不起作用。我必须检查
=
是否存在于$\u服务器['REQUEST\u URI']
中,所以我知道有一个变量可以使用。我想这取决于你,因为你将提供推荐链接,对吗?我有点不好意思,我不知道路径信息。布拉沃赢得了一些新东西。谢谢