为什么$ _SERVER ['PHP_SELF']在一个实例中返回一个文件名/test/foo.bar,另一个实例(从同一个php脚本执行)返回//test/foo.bar(带有双前导斜杠) )?
form.php将$ _GET发送到login.php。 login.php重定向到
header ('Location: test/foo.bar')
foo.bar包括:
$page = filter_var($_SERVER['SCRIPT_NAME'], FILTER_SANITIZE_STRING);
(此外,我无法按需复制它。)
答案 0 :(得分:1)
$_SERVER['PHP_SELF']
的值取决于客户端发送的实际请求。 Apache允许目录名之间有多个斜杠,因此它将http://example/foo.php
视为与http://example//foo.php
相同 - 两者都将调用foo.php
,但请求URI将包含客户端请求的任何内容。
如果您的脚本只需要一个斜杠,则必须手动剥离剩余的斜杠。
答案 1 :(得分:1)
我猜你是在某个地方用代码构建链接(或者某人只是在某个地方输入了一个额外的斜杠)。您可能会在这些行中包含一些代码:
function buildLink($site, $relPath, $text) {
return "<a href=\"$site/$relPath\">$text</a>";
}
如果在某些情况下使用尾部斜杠传入$site
,则在删除服务器名称时最终会得到前导双斜杠。或者,如果传入绝对路径。额外的斜杠不会影响显示哪个页面,但它仍会显示在已解析的URL中。
答案 2 :(得分:0)
您可以尝试使用$ _SERVER ['SCRIPT_NAME']。请注意,PHP_SELF容易受到一些类型的攻击,因此在使用它时要小心。您必须将其视为用户提供的输入。