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

How to know if a script was included inside another script

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

我有一些文件包含其他文件作为依赖项,这些文件需要有全局代码,如果 $_POST 包含某些值,这些文件将被执行,像这样

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

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

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

我尝试使用 $_SERVER 数组来尝试猜测 post 请求使用了哪个脚本,尽管它起作用了,因为它是正确的脚本,但它与用于每个包含的文件。

问题是:

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

我告诉 reader(潜在回答者)这件事,因为我认为它清楚地表明我不需要一个解决方案来解决已经存在的问题文件,因为它们可以重新生成。

听上去你可以对你的代码结构做一些改进来完全避免这个问题。然而,根据给定的信息,一个简单的标志变量应该可以解决问题:

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();