如何知道一个脚本是否包含在另一个脚本中


How to know if a script was included inside another script

我是PHP的新手,很可能我使用了不正确的方法,因为我不习惯像PHP程序员那样思考。

我有一些文件包含其他文件作为依赖项,这些文件需要有全局代码,如果$_POST包含某些值,就会执行这些代码,比如这个

if (isset($_POST["SomeValue"]))
 {
    /* code goes here */
 }

所有的文件都将包含这个代码部分,当然每个文件都有自己的代码。

问题是,由于这些文件可以包含在这些文件中的另一个文件中,所以我描述的代码部分会在每个包含的文件中执行,即使我发布了AJAX并明确使用了我想要发布的脚本的URL。

我尝试使用$_SERVER数组来尝试猜测post请求使用了哪个脚本,尽管它之所以有效,是因为它是正确的脚本,但对于每个包含的文件来说,它都是相同的脚本。

问题是:

  • 有没有办法知道该文件是否包含在另一个文件中,这样我就可以测试它,并跳过只有在$_POST包含所需值时才执行的代码

注意:文件是使用python脚本生成的,该脚本本身使用c库来扫描数据库中的表和约束,c库是我的,也是python脚本,它们工作得很好,如果对单个文件进行了修复,显然只需要对python脚本执行即可。

我告诉读者(潜在回答者)这件事,因为我认为这清楚地表明,我不需要对现有文件有效的解决方案,因为它们可以重新生成。

听上去,您可以对代码结构进行一些改进,以完全避免这个问题。然而,对于给定的信息,一个简单的标志变量应该可以做到这一点:

if (!isset($postCodeExecuted) && isset($_POST["SomeValue"]))
{
    /* code goes here */
    $postCodeExecuted = true;
}

这个变量将在全局命名空间中设置,因此它将在任何地方都可用。

我通过这个解决了问题

$caller = str_replace($_SERVER["DOCUMENT_ROOT"], "", __FILE__);
if ($_SERVER["REQUEST_METHOD"] === "POST" and $caller === $_SERVER["PHP_SELF"])
    performThisAction();