Javascript PHP函数仅在未直接访问时运行

Javascript PHP函数仅在未直接访问时运行,javascript,php,function,Javascript,Php,Function,目前,只有当GET请求被发送到包含它的文件时,我才运行PHP函数。我通过JavaScript将这些请求发送到PHP文件。此外,我希望它仅在get请求通过JavaScript文件发送且未被直接访问时运行该函数 例如: run.js function runfun(what, data) { $.get("files/functions.php",{ run:'true', what:what,

目前,只有当
GET
请求被发送到包含它的文件时,我才运行PHP函数。我通过JavaScript将这些请求发送到PHP文件。此外,我希望它仅在get请求通过JavaScript文件发送且未被直接访问时运行该函数

例如:

run.js

function runfun(what, data) {
    $.get("files/functions.php",{
                       run:'true', 
                       what:what, 
                       data:data
            }, 
            function(data) {
            }
    }
functions.php

if (isset($_GET['run']) && isset($_GET['what']) && isset($_GET['data'])) {
    runstuff($_GET['what'], $_GET['data']); // I do NOT want this to run if
                   // the functions.php file is accessed directly and if the GET 
                   // variables are set on the page itself
}

我不认为有什么可靠的方法可以做到这一点,但是,您可以使用以下方法来检测AJAX请求:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    /* special ajax here */
    die($content);
}
请注意,这可能是欺骗

代码取自:


此外,正如@FDL在他们的评论中指出的那样,您可以使用nonce。

为请求添加一个在特定时间后过期的唯一令牌。您还可以检查请求是否来自AJAX,但它可能是伪造的。使用POST提交,您将使大多数“普通”用户无法在没有REST客户端的情况下“直接”调用它。您应该能够在中检查
request\u URI
和/或
SCRIPT\u FILENAME