不带 GET 参数的请求字符串 parse_url解决方案 strtok solution把它们放在一起:
有没有一种简单的方法可以在没有GET参数的情况下获取请求的文件或目录?例如,如果URL是,我只想返回。我很惊讶,在.我错过了一个吗?http://example.com/directory/file.php?paramater=value
http://example.com/directory/file.php
$_SERVER[]
有没有一种简单的方法可以在没有GET参数的情况下获取请求的文件或目录?例如,如果URL是,我只想返回。我很惊讶,在.我错过了一个吗?http://example.com/directory/file.php?paramater=value
http://example.com/directory/file.php
$_SERVER[]
(请为该答案投赞成票,以便它更明显)。
最简单的解决方案是:
echo parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
Parse_url是一个内置的php函数,它的唯一目的是从URL中提取特定的组件,包括(第一个之前的所有内容)。因此,这是我解决这个问题的新“最佳”解决方案。PATH
?
您可以使用 strtok 在 首次出现 之前获取字符串 ?
$url=strtok($_SERVER["REQUEST_URI"],'?');
性能说明:这个问题也可以使用爆炸来解决。
在字符的第一个实例之前,strtok的应用程序将比PHP中的任何其他方法更好地执行strtok,尽管会将查询字符串保留在内存中。
$_SERVER
虽然OP没有询问它,但我认为值得一提的是:parse_url应该用于从URL中提取任何特定组件,请参阅该函数的文档:
parse_url($actual_link, PHP_URL_SCHEME);
这里需要注意的是,从请求中获取完整的URL并不是一件容易的事,并且具有许多安全隐患。 变量是你的朋友,但它们是一个善变的朋友,因为apache /nginx配置,php环境,甚至客户端,都可以省略或改变这些变量。所有这些都远远超出了这个问题的范围,但它已经被彻底讨论过了:$_SERVER
https://stackoverflow.com/a/6768831/1589379
请务必注意,这些变量是在运行时由执行 ( 或 ) 的任何引擎填充的。这些变量从操作系统传递到Web服务器(apache/nginx)再到php引擎,并在每个步骤中进行修改和修正。唯一可以依赖的此类变量是(因为php需要它),以及RFC 3875中列出的变量(参见:PHP:$_SERVER),因为它们是Web服务器所必需的。$_SERVER
/var/run/php/
/etc/php/[version]/fpm/
REQUEST_URI
请注意:在其他问题上,垃圾邮件链接到您的答案并不好。
您可以使用 来获取请求的路径。然后,您需要删除参数...$_SERVER['REQUEST_URI']
$uri_parts = explode('?', $_SERVER['REQUEST_URI'], 2);
然后,添加主机名和协议。
echo 'http://' . $_SERVER['HTTP_HOST'] . $uri_parts[0];
如果您混合使用 和 ,您还必须检测协议。我留给你作为练习。 返回协议。http:
https://
$_SERVER['REQUEST_SCHEME']
把它们放在一起:
echo $_SERVER['REQUEST_SCHEME'] .'://'. $_SERVER['HTTP_HOST'] . explode('?', $_SERVER['REQUEST_URI'], 2)[0];
...返回,例如:
http://example.com/directory/file.php