【问题标题】:Can I include a class file from another server我可以包含来自另一台服务器的类文件吗
【发布时间】:2018-08-08 04:49:20
【问题描述】:

我在 server1 中有一个类。 server1 中的 FILE1

<?php
class myObject
  {
    public function __construct()
    {
      echo 'Hello, World';
    }
  }

?>

服务器 2 中的文件 2

$section = require('http://xx.xxx.xxx.x/plugins/myObject.php');
$intance = new myObject();

从 server1 本身的 php 文件调用 file2 时,会创建 Object。我可以在浏览器中看到“Hello World”。 但是当从 server2 调用 file2 时它会失败。我找不到致命错误类。我也尝试过 include/file_get_contents/read/ __autoload /spl_autoload_register 方法。从另一台服务器调用我的类没有任何帮助。

这可能吗?谁能建议一个替代方案?请帮忙

更新: 我在我试图包含文件的 server2 中有 fopen 并包含 url。实际上,我需要将班级和我的网站作为两台服务器。

场景: 我正在尝试在 server2 中建立一个钱包网站。我在另一台服务器 [s1] 中有必要的插件。我已经编写了一个与服务器 1 本身中的插件交互的类文件。我计划在更多服务器上拥有钱包网站。但是所有这些网站都将与 server1 中的类进行交互。如果我能以某种方式将该类中的代码获取到我的网站,那么我也可以创建对象并从其他服务器调用类方法。请提出其他实现方式。

更新 2: 我可以构建类似 API 的东西吗?我的所有网站都会向 S1 中的主类发送请求并获得响应。举个例子会很有帮助

【问题讨论】:

  • 包含另一个服务器的文件会触发GET请求,远程服务器上的脚本会在远端执行。看不到如何“要求”远程脚本。也许您应该考虑以另一种方式编写代码,不需要任何远程脚本。试试 Composer 等依赖工具
  • 为什么要这样做?你想达到什么目的?
  • @Mr.Developer 我看到了上面的链接并尝试了回答中所说的要求。
  • 根据您最近的编辑,您确实需要一个依赖工具,例如 Composer ;它将在您的所有服务器上复制 php 脚本(尽管代码将在本地运行)

标签: php class


【解决方案1】:

你能从远程文件中require 吗?不,你可以从远程文件中包含吗?是的。这称为远程文件包含,通常被视为安全风险。来自PHP's documentation of include

如果在 PHP 中启用了“URL 包含包装器”,您可以使用 URL(通过 HTTP 或其他受支持的包装器 - 请参阅支持的协议和包装器以获取协议列表)而不是本地路径名来指定要包含的文件。如果目标服务器将目标文件解释为 PHP 代码,则可以使用与 HTTP GET 一起使用的 URL 请求字符串将变量传递给包含的文件。严格来说,这与包含文件并使其继承父文件的变量范围不同。该脚本实际上是在远程服务器上运行,然后将结果包含到本地脚本中。

要使用此功能,请打开您的php.ini 文件并将allow_url_include 设置为1"On"

在那之后,你现在可以做

$section = include('http://xx.xxx.xxx.x/plugins/myObject.php');
$intance = new myObject();

但请注意,如果您允许用户操纵要包含的参数,他将能够注入任意 PHP 代码。

【讨论】:

    【解决方案2】:

    如果您想从服务器 1 在服务器 2 上运行代码,您需要实现一个 Web 服务来执行此操作。所以服务器 2“调用”服务器 1 上的 php 文件,它并不“需要”它。试试这样的:

    文件 1 服务器 1

       <?php
        class myObject
        {
    
            public function __construct()
            {
              echo json_encode(['result'=>'really cool data result'])
            }
        }
    
       new myObject();
    
        ?>
    

    文件 2 服务器 2:

    <?php
    
    set_time_limit(0);
    
    $url = "http://xx.xxx.xxx.x/plugins/myObject.php";
    
    $ch = curl_init();
    // Disable SSL verification
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // Will return the response, if false it print the response
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // Set the url
    curl_setopt($ch, CURLOPT_URL,$url);
    // Execute
    $result_json=curl_exec($ch);
    // Closing
    curl_close($ch);
    
    $result_obj = json_decode($result_json);
    
    $result = $result_obj->result
    

    如果您想在服务器 1 上运行代码,您必须这样做,然后使用服务器 1 的结果并在服务器 2 上对其进行处理。您无法使用服务器 1 上存在的软件在服务器 2 上运行代码因为根据定义,您不能在一台机器上运行另一台机器上存在的东西。

    【讨论】:

      【解决方案3】:

      不,你不能那样做。即使有非常糟糕的解决方法可以做到这一点,你也不应该这样做。

      如果您关心安全性,它会使您的代码非常脆弱。

      【讨论】:

        【解决方案4】:

        这可能吗?

        没有。 PHP 代码永远不会离开服务器。这就是为什么会有像Composer 这样的依赖管理工具。

        【讨论】:

          【解决方案5】:

          您可能需要先下载文件,然后requireing。

          【讨论】:

            猜你喜欢
            • 2016-12-15
            • 1970-01-01
            • 1970-01-01
            • 2011-02-14
            • 2012-06-11
            • 1970-01-01
            • 2018-04-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多