我可以包含来自其他服务器的类文件

时间:2018-02-28 10:29:37

标签: php class

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

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

?>

server2中的文件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方法。从其他服务器调用我的类没有任何帮助。

这可能吗?任何人都可以建议替代方案?请帮忙

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

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

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

5 个答案:

答案 0 :(得分:2)

  

这可能吗?

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

答案 1 :(得分:1)

如果要从服务器1在服务器2上运行代码,则需要实现执行此操作的Web服务。所以服务器2&#34;呼叫&#34;服务器1上的php文件没有&#34;要求&#34;它。尝试这样的事情:

文件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上运行代码因为根据定义,您无法在另一台计算机上存在的一台计算机上运行某些内容。

答案 2 :(得分:0)

您可能需要先下载该文件,然后require

答案 3 :(得分:0)

不,你不能那样做。即使有非常糟糕的工作要做,你也不应该这样做。

如果您关心安全性,它会使您的代码非常容易受到攻击。

答案 4 :(得分:0)

你能从远程文件中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 代码。