簡體   English   中英

包括php的另一台服務器的php文件

[英]including php file from another server with php

我有兩個PHP文件位於不同的服務器上,一個位於http://www.mysite.com/main.php ,另一個位於http://www.sample.com/includeThis.php

我想要包含第一個文件。

第二個文件的內容如下所示:

<?php
$foo = "this is data from file one";

第一個文件:

<?php
include "http://www.sample.com/includeThis.php";
echo $foo;

有什么方法可以做到這一點嗎?

不,在大多數Web服務器(php.ini)中默認禁用/不允許此設置,因此出於安全原因 ,您不能使用include來包含遠程地址中的文件。

如果您仍希望允許包含遠程文件,則必須在php.ini中將指令allow_url_include設置為On

但從安全導向的觀點來看,這也是一種不好的做法; 因此,它通常是禁用的(實際上我從來沒有看到它啟用)

如果你想讀,雖然遠程文件的內容 ,你可以使用file_get_contents函數而不是但這將返回為純HTML標記代碼,不會有任何服務器端代碼。

在閱讀你的評論之后 - 你在其中聲明你想要這樣做作為一種復制保護手段 - 我的回答是強調的, 忘了它 這不是復制保護的工作原理。

使用include()唯一可以做的就是從其他地方獲取源代碼,以便在本地解釋器上進行解釋 這很容易破解:惡意客戶只需要echo()獲取的代碼。

遠程(在您的服務器上)執行遠程腳本對您沒有幫助,因為該腳本的狀態(變量,函數...) 將不會出現在您調用它的腳本中。

你有的選擇是:

  • 編譯/編碼/混淆腳本,可能需要特定的PHP模塊來執行它(在SO上有很多關於此的問題)

  • 創建在服務器上運行的真實Web服務(例如,使用SOAP),並執行所請求的操作

但是,對於它的價值,我個人不會購買,也不建議客戶購買需要“打電話回家”才能工作的編碼腳本和腳本。 我相信通過嚴格的許可協議保​​護您的產品(這會嚇到商業客戶購買您的產品,因為偷竊的風險太高了。)

我想知道OP是否為自己找到了解決方案。 據我所知,唯一的方法就是將所有客戶帳戶放在與要包含的腳本相同的服務器上 - 我做了類似的事情:

/path_to_myserver_root/httpdocs/clients/client01/wwwroot/scriptA.php /path_to_myserver_root/httpdocs/clients/client02/wwwroot/scriptA.php ETC ....

那么:/ path_to_myserver_root/privatefiles/myapp/scriptB.php

wwwroot是每個客戶端域指向的地方。

scriptA.php有一些業務邏輯,然后包含scriptB.php,它的函數具有上面的完整路徑:

要求( '/ path_to_myserver_root / privatefiles / MyApp的/ scriptB.php')

scriptB.php駐留在服務器上的私有受保護目錄中,不能由http訪問,也不能由客戶端遍歷。

現在請注意,我這樣做的原因是為了保持多個帳戶的版本一致性,而不是從我的客戶那里扣留一些專有的神奇PHP代碼 - 但我想它可以為此目的實現。

嗯,YMMV。

當你嘗試按照你的建議瀏覽域時,你實際上並沒有包含一個准備好做的文件 - 過程是不同的。 機器需要通過http恢復文件,這不是include語句的全部內容。

此外,如果您在共享主機上,PHP通常配置為阻止您進入您自己的域之外。

如果您不受此限制,一種解決方案可能是使用PHP從另一台服務器復制該文件的副本,然后在它位於您的域中后將其包含在內。 另一個應用程序可能是編寫一個小的“部署”腳本,無論何時進行更改,它都會將其復制到需要的任何位置......

希望這可以幫助...

馬丁

將第一個重命名為.txt
然后三思而后行,你確定你需要跨域包含

使用file_get_contents打開文件,將其附加到第二個文件,如下所示:

$secondFile = file_get_contents('http://www.sample.com/includeThis.php');
file_put_contents('your_file', $secondFile, FILE_APPEND);

如果您想將它放在文件的末尾,這將有效。 不只是在你的文件上做一個包含。

無論如何,就像我說的,這是一個冒險和危險的IMO,特別是如果你不確定它里面的內容。

此外,your_file需要是實際的服務器路徑,而不是URL。

暫無
暫無

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

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