【问题标题】:How to check if a php script is being called by another script on the server?如何检查服务器上的另一个脚本是否正在调用 php 脚本?
【发布时间】:2011-11-10 20:14:06
【问题描述】:

我有一个脚本 scripty.php

有时此脚本会通过浏览器调用。

其他时候它被服务器上的另一个脚本调用。

我如何(安全地)检查 scripty.php 以查看它是否被服务器调用?

【问题讨论】:

  • 如何从服务器准确调用脚本?使用包含()?文件获取内容()?使用文件路径还是 http URL?
  • @Pekka - 以 http URL 的形式

标签: php


【解决方案1】:

以 http URL 的形式

当从服务器调用脚本时,为您提供发出请求的客户端 IP 地址的 $_SERVER["REMOTE_ADDR"] 变量应该是 127.0.0.1

【讨论】:

  • 除非它是从另一个脚本调用的,也就是从浏览器调用的......我是这样理解的。
  • @Rok 如果服务器上的脚本正在进行http:// 调用,则该脚本将是调用者,而不是浏览器。至少我是这样理解 OP 在评论中所说的
  • 我的意思是从 http:// 调用脚本 a.php 并调用另一个脚本 b.php。因此 b.php script is being called by another script on the server
  • 不幸的是它不适合在本地机器上开发。无论哪种方式,您都会收到127.0.0.1
  • stackoverflow.com/a/7225638/535406 似乎是一个很好的解决方案,只依赖于脚本 names — 不需要额外的常量或变量。
【解决方案2】:

您可以在包含脚本之前创建一个变量

$by_script = true;
include("new_script.php");

在里面检查一下

【讨论】:

    【解决方案3】:

    只是猜测:您想知道脚本是通过浏览器调用还是通过 CLI 调用的

    var_dump(PHP_SAPI);
    

    【讨论】:

    • 是的,也许 OP 想要你的方式。很难说。
    【解决方案4】:

    在任何将调用它的脚本上定义一个常量,如define("IN_SCRIPT"),在 scripty.php 中,您可以检查该常量以确定它是否在另一个脚本中。

    例如

    if(defined("IN_SCRIPT")){
    // We must be inside a script right now!
    }
    

    if(!defined("IN_SCRIPT")){
    // We are working alone now
    }
    

    【讨论】:

      【解决方案5】:

      考虑一个名为 test.php 的文件,这是唯一包含的代码:

      echo str_replace("\\","/",$_SERVER["SCRIPT_FILENAME"]);
      echo str_replace("\\","/",__FILE__);
      

      当用户通过浏览器 url 执行* test.php 时,输出如下:

      "C:/xampp/htdocs/test.php"
      "C:/xampp/htdocs/test.php"
      

      否则,不同((在这种情况下 another.php 由浏览器 url 执行,其中包括 test.php ))

      "C:/xampp/htdocs/another.php"
      "C:/xampp/htdocs/test.php"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-10
        相关资源
        最近更新 更多