Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP获取变量“/”而不是“?”`_Php_Variables_Get - Fatal编程技术网

PHP获取变量“/”而不是“?”`

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

我使用的脚本不允许URL中有
$\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']
中,所以我知道有一个变量可以使用。我想这取决于你,因为你将提供推荐链接,对吗?我有点不好意思,我不知道
路径信息。布拉沃赢得了一些新东西。谢谢