簡體   English   中英

我可以包含來自另一台服務器的類文件嗎

[英]Can I include a class file from another server

我在 server1 中有一個類。 服務器 1 中的 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 時,會創建對象。 我可以在瀏覽器中看到“Hello World”。 但是當從 server2 調用 file2 時它會失敗。 我找不到致命錯誤類。 我也嘗試過 include/file_get_contents/read/ __autoload /spl_autoload_register 方法。 從另一台服務器調用我的類沒有任何幫助。

這可能嗎? 任何人都可以提出替代方案嗎? 請幫忙

更新:我有 fopen 並在 server2 中包含 url,我試圖從那里包含文件。 實際上我需要班級和我的網站成為兩台服務器。

場景:我正在嘗試在 server2 中建立一個錢包網站。 我在另一台服務器 [s1] 中有必要的插件。 我已經編寫了一個與服務器 1 本身中的插件交互的類文件。 我計划在更多服務器上建立錢包網站。 但是所有這些網站都將與 server1 中的類進行交互。 如果我能以某種方式將該類中的代碼發送到我的網站,那么我也可以創建對象並從其他服務器調用類方法。 請建議其他方式來實現這一點。

更新 2:我可以構建類似 API 的東西,我的所有網站都將向 S1 中的主類發送請求並獲得響應。 一個例子會有所幫助

這可能嗎?

不會。PHP代碼永遠不會離開服務器。 這就是為什么有諸如Composer之類的依賴項管理工具的原因。

如果要從服務器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上運行代碼。您不能在另一台計算機上存在的一台計算機上運行某些內容。

您可能需要先下載文件,然后再require下載。

不,你不能那樣做。 即使這樣做確實有不好的解決方法,也絕對不要這樣做。

如果您關心安全性,它會使您的代碼非常容易受到攻擊。

你可以從遠程文件中require嗎? 不。你可以從遠程文件中包含嗎? 是的。 這稱為遠程文件包含,通常被視為安全風險。 PHP 的文檔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 代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM