如何检测文件是否被访问或请求?
AI有一个PHP文件,如果用户直接访问它,他应该被重定向到另一个位置,但如果我的脚本通过ajax调用它,它应该没有什么特别的。
例如,如果用户访问
/site/page.php
他应该被重定向到
/index.php?view=page
但如果他在index.php?view=page
则文件应加载而不重定向。
我怎样才能做到这一点?
编辑 :如果你想确定是否通过Javascript请求脚本,你将不得不以某种方式发出信号。
几个工具包定义标题X-Requested-With
。 在这种情况下,您可以使用以下命令检查Javascript调用:
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { //requested with Javascript }
您可以检查 debug_backtrace
给出的结果大小。
或者(更好),您可以检查$_SERVER['SCRIPT_FILENAME']
:
if (realpath(__FILE__) == realpath($_SERVER['SCRIPT_FILENAME'])) { //this one was requested; not in include }
通过“它应该没有什么特别的”你的意思是它不应该重定向?
所以Q真的是如果用户直接访问PHP文件的URL,它应该重定向,如果通过AJAX,正常处理? (要真正澄清,你的意思是通过URL而不是通过包含声明,对吧?)
答:你不能。 Artefacto提到HTTP_X_REQUESTED_WITH标题 – 当然,但这可能是假的。
用户直接访问URL真的很糟糕吗? 如果答案是“OMG是的!” 那么系统的设计方式可能有问题。 重新设计它直到答案是“实际上,我认为它不会真的受伤。”
如果您真的不希望有人访问/site/page.php
,您应该考虑在您的Web根目录之外移动/site/page.php
。 然后让你的index.php
根据需要加载它: