【问题标题】:Get the URL of current script even if it's included?获取当前脚本的 URL,即使它包含在内?
【发布时间】:2013-05-02 15:21:01
【问题描述】:

我有一个 PHP 脚本需要知道它的 URL,即使它包含在另一个脚本中。我试过了:

$_SERVER['REQUEST_URI']

但这不会将 URI 返回给我的脚本——而是将 URI 返回给 包括 脚本。我也试过:

dirname ( __FILE__ )

但我似乎无法将其转换为绝对 URL。

我的脚本能否找到自己的 URL,即使它包含在另一个脚本中?感谢您的帮助!

【问题讨论】:

  • 简短的回答是否定的。长答案也是NO
  • 究竟为什么需要知道它的位置?
  • 这是一个可重用的模块,可将 HTML 写入页面,包括 AJAX 对自身的 URL 引用。我可以对它的位置进行硬编码,但我希望有一种以编程方式获取它的方法。
  • 您可以尝试将 FILE 与 argv[0] 之类的进行比较,但确实没有可靠的方法来检测脚本是否被包含()或直接执行.这就是 include() 的全部意义——它应该对代码是透明的。
  • 当然,您需要知道的只是来自 $_SERVER 的 URL,即使在调用该 url 时包含脚本,那么您的脚本仍在运行,这听起来像是您需要的。而不是尝试直接调用可能包含的文件,我肯定会皱眉头,因为它绕过了所有其余的应用程序配置和逻辑。

标签: php


【解决方案1】:

我认为你不能,至少不能以健壮和便携的方式。 PHP 鼓励开发人员认为 URL 直接映射到脚本,因此人们可能会相信,对于每个脚本 S,都有一个 function(S) 提供其公共 URL。

不幸的是,这不是真的。作为快速参考,只需考虑 mod_rewrite 或反向代理可能会请求您的脚本。

如果您确实需要此功能,则可能是您有设计错误,因此如果您确切地说出您的问题(就功能而言,而不是实现而言),那么有人可能会为您提出正确的解决方案。

【讨论】:

  • 谢谢。我的模块将 HTML 表单写入网页,它必须使用 AJAX 的 URL 引用自身。 URL 不能是相对的,因为包含脚本的位置未知。
  • 所以只需在<form> 元素中省略action 属性:用户代理将默认为页面来自的URL
猜你喜欢
  • 2011-04-01
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多