我在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中的主类发送请求并获得响应。一个例子很有帮助
答案 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 代码。