代码之家  ›  专栏  ›  技术社区  ›  BrunoLM

如何检测文件是否被访问或请求?

  •  0
  • BrunoLM  · 技术社区  · 14 年前

    A我有一个PHP文件,如果用户直接访问它,他应该被重定向到另一个位置,但是如果我的脚本通过ajax调用它,它应该没有什么特别的作用。

    例如,如果用户访问

    /site/page.php
    

    /index.php?view=page
    

    但如果他在 index.php?view=page 该文件应在不重定向的情况下加载。

    我该怎么做?

    3 回复  |  直到 14 年前
        1
  •  5
  •   BrunoLM    14 年前

    编辑 :如果要确定脚本是否是通过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
    }
    

        2
  •  0
  •   James    14 年前

    你说的“它不应该做什么特别的事”是指它不应该重定向吗?

    (要真正澄清,你的意思是通过URL而不是通过include语句,对吗?)

    回答:你不能。artefactor提到了HTTP\ux\u请求的带有头的\u-当然,但这可能是伪造的。

        3
  •  0
  •   Seth    14 年前

    如果你真的不想有人 /site/page.php ,你应该考虑搬家 在你的网络根目录之外。那就做你的 index.php 根据需要加载:

    <?php 
    $includes = "/path/to/includes";  // specified in a config file somewhere
    
    if ($_GET["view"] == "page") {
        require_once(path_join($includes, "page.php")); 
        DoStuffInPageDotPHP();
    }
    else {
        DoSomethingElse();
    }
    ?>