测试是否从本地文件调用了php include


Test if a php include is called from a local file

我有一个php包含其中的一个函数,我需要确保它只能通过包含在本地文件中执行,而不是从任何外部源。

最好的测试方法是什么?

-谢谢肖恩

更新:

谢谢,这里有一些更多的信息,-我不能把它移出网页,我正在更新一个现有的网站-测试REMOTE_ADDR将总是返回客户端的ip-我想要这个文件调用的唯一方式是:include_once "sendmail.php";

我看到了两种情况:

  1. 文件可以使用任何浏览器通过http访问。在这种情况下,可以在主应用程序中定义CONST,然后检入include:

    主要文件:

    define('MY_APP', true);
    

    包括文件:

    if (!defined('MY_APP') || MY_APP !== true) {
      die('Access denied');
    }
    
  2. 文件可以通过文件系统访问(例如从附近的虚拟主机)。那么您可以使用SERVER_NAME和REQUEST_URI检查。

忘记测试。请将文件保存在web浏览器之外。

如果它不能通过HTTP提供,那么它就不能在外部使用。

(但是,如果它只包含一个函数,并且没有自动执行的语句,那么任何外部请求都将以空白HTTP响应结束,除非服务器开始以纯文本形式提供PHP文件)

如果你总是在同一个文件中包含并执行它,你可以在你的函数中做一个URL检查。

function curPageURL() {
     $pageURL = 'http';
     if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
     $pageURL .= "://";
     if ($_SERVER["SERVER_PORT"] != "80") {
         $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
     } else {
         $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
     }
     return $pageURL;
}

//Your included function:
function doSomething() {
    if (curPageUrl() == "http://www.yourwebsite.com/function.php") {
        ... execute code...
    }
}

您可以使用$_SERVER数组返回调用者的IP。

$callerIP = $_SERVER['SERVER_ADDR'];

您可以检查$callerIP是否为localhost