首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中识别请求的页面

如何在PHP中识别请求的页面
EN

Stack Overflow用户
提问于 2009-06-11 08:46:43
回答 5查看 32.1K关注 0票数 17

有什么简单的方法可以识别最初处理请求的文件,忽略get参数并处理(至少是基本的)映射,比如//index.php的映射

理想情况下,我寻找的是类似于$_SERVER['REQUEST_URI']的东西,除了它返回相同的值而不是get参数,并且该值是请求的文件,而不是URI,也不是当前执行的文件($_SERVER['PHP_SELF'])。换句话说,就是一个$_SERVER['REQUESTED_FILE']之类的东西。我还没见过这样的东西。它是否存在,或者我是否需要手动编写一些内容?

更新这里有一些示例URL与我想要的结果配对:

example.com/mypage.php       : /mypage.php
example.com/                 : /index.php
example.com/foo/?hello=world : /foo/index.php

即使在包含的文件中,这些返回值也是真的。在回答之前请看下面的答案,我想我已经找到了我想要的东西。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-06-12 00:54:07

我决定自己测试一下。$_SERVER['SCRIPT_NAME']变量提供所请求文件的路径,即使它是一个索引文件,并且没有get参数或任何其他内容。PHP文档指出,它包含文件的路径,但它似乎是相对于文档根目录的,就像PHP_SELF一样,但没有安全漏洞。

下面是我用来测试的代码:https://gist.github.com/dimo414/5484870

请求example.com/?foo=bar时的输出

__FILE__:               /var/www/index.php
PHP_SELF:               /index.php
SCRIPT_NAME:            /index.php
REQUEST_URI:            /?foo=bar
parse_url(REQUEST_URI): /


__FILE__:               /var/www/pathtest.php
PHP_SELF:               /index.php
SCRIPT_NAME:            /index.php
REQUEST_URI:            /?foo=bar
parse_url(REQUEST_URI): /

以及请求example.com/index.php/<strong>XSS</strong>时的输出

__FILE__:               /var/www/index.php
PHP_SELF:               /index.php/XSS # note the XSS exploit (this is bold in browser)
SCRIPT_NAME:            /index.php     # No exploit here
REQUEST_URI:            /index.php/%3Cstrong%3EXSS%3C/strong%3E
parse_url(REQUEST_URI): /index.php/%3Cstrong%3EXSS%3C/strong%3E


__FILE__:               /var/www/pathtest.php
PHP_SELF:               /index.php/XSS
SCRIPT_NAME:            /index.php
REQUEST_URI:            /index.php/%3Cstrong%3EXSS%3C/strong%3E
parse_url(REQUEST_URI): /index.php/%3Cstrong%3EXSS%3C/strong%3E

如你所见,$_SERVER['SCRIPT_NAME']总是返回最初处理请求的文件,即URL中的文件,没有任何XSS风险。

票数 27
EN

Stack Overflow用户

发布于 2009-06-11 08:53:43

$_SERVER['PHP_SELF']

应该返回实际的脚本。但也有various methods

我有一个更好的链接,指向所有与文件相关的各种环境变量的矩阵,但我找不到它。如果出现的话我会编辑的。

编辑:我找到了a nice SO thread that details the differences between them

票数 6
EN

Stack Overflow用户

发布于 2016-11-18 14:02:17

使用以下代码从请求的URL获取文件名。

basename($_SERVER['URL']);
basename($_SERVER['REQUEST_URI']);
basename($_SERVER['SCRIPT_NAME']);
basename($_SERVER['SCRIPT_FILENAME']);
basename($_SERVER['REQUEST_URI']);
basename($_SERVER['PATH_TRANSLATED']);
basename($_SERVER['PHP_SELF']);

在嵌套的if条件中使用任何一个,所有这些,这样您就不会错过任何文件名了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/980018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档