使用php包含来自另一台服务器的php文件

使用php包含来自另一台服务器的php文件,php,file,include,Php,File,Include,我有两个PHP文件位于不同的服务器上,一个位于http://www.mysite.com/main.php,另一个位于http://www.sample.com/includeThis.php 我想包括第一个文件中的第二个文件 第二个文件的内容如下所示: <?php $foo = "this is data from file one"; 不,默认情况下,大多数web服务器(php.ini)都禁用/不允许此设置,因此出于安全原因,您不能使用包含来包含来自远程地址的文件 如果仍要允许包含远

我有两个PHP文件位于不同的服务器上,一个位于
http://www.mysite.com/main.php
,另一个位于
http://www.sample.com/includeThis.php

我想包括第一个文件中的第二个文件

第二个文件的内容如下所示:

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

不,默认情况下,大多数web服务器(php.ini)都禁用/不允许此设置,因此出于安全原因,您不能使用
包含
来包含来自远程地址的文件

如果仍要允许包含远程文件,则必须在php.ini中将指令设置为
On

但从安全的角度来看,这又是一种不好的做法;因此,它通常被禁用(实际上,我从未见过它被启用)


如果您想读取远程文件的内容,您可以使用函数来代替,但是这将作为纯HTML标记代码返回,不会有任何服务器端代码。

当您尝试按照建议跨越域时,实际上,您并没有包含一个已准备就绪的文件—过程是不同的。机器需要通过http返回文件,这不是include语句的全部内容

此外,如果您使用的是共享主机,PHP通常被配置为防止您走出自己的域

如果您不受此限制,一种解决方案可能是使用PHP从另一台服务器复制回文件的副本,然后在文件位于您的域中时将其包括在内。另一种方法可能是编写一个小的“部署”脚本,在您进行更改时将其复制到需要的任何地方

希望这有助于


Martin

将第一个文件重命名为.txt

然后再三考虑,是否确实需要跨域包含使用
文件\u获取\u内容
,要打开该文件,请将其附加到第二个文件,如下所示:

$secondFile = file_get_contents('http://www.sample.com/includeThis.php');
file_put_contents('your_file', $secondFile, FILE_APPEND);
如果您想将其放在文件的末尾,这将起作用。而不仅仅是在你的文件中包含

不管怎么说,就像我说的,在我看来,这是危险的,特别是如果你不确定里面有什么内容的话


此外,您的_文件需要是实际的服务器路径,而不是URL。

在阅读您的评论后(您在评论中表示希望这样做作为一种拷贝保护手段),我的回答是强调,忘记它。这不是复制保护的工作方式

使用
include()
可以做的唯一一件事就是从其他地方获取源代码,以便在本地解释器上进行解释。这很容易破解:恶意客户只需
echo()
获取的代码即可

远程执行远程脚本(在服务器上)不会对您有所帮助,因为该脚本的状态(变量、函数…)不会出现在您调用它的脚本中

您可以选择:

  • 编译/编码/混淆脚本,可能需要一个特定的PHP模块来执行它(关于这方面有很多问题)

  • 创建在服务器上运行的真实web服务(例如,使用SOAP),并执行请求的操作


尽管如此,我个人并不购买,也不建议客户购买编码脚本和需要“打电话回家”才能工作的脚本。我相信通过严格的许可协议来保护您的产品(这会吓唬商业客户购买您的产品,因为偷窃被抓住的风险太高了。)

我想知道OP是否为自己找到了解决方案。据我所知,实现这一点的唯一方法是将所有客户机帐户与要包含的脚本放在同一台服务器上-我做了类似的事情:

/路径\到\ myserver \ root/httpdocs/clients/client01/wwwroot/scriptA.php /路径\到\ myserver \ root/httpdocs/clients/client02/wwwroot/scriptA.php 等等

然后: /路径_到_myserver_root/privatefiles/myapp/scriptB.php

wwwroot是每个客户端域指向的位置

scriptA.php有一些业务逻辑,然后将scriptB.php包含在上面的完整路径中:

require('/path_to_myserver_root/privatefiles/myapp/scriptB.php'))

scriptB.php驻留在服务器上受私有保护的目录中,http无法访问该目录,客户端也无法访问该目录

现在请注意,我这样做的原因是为了在多个帐户之间保持版本一致性,而不是拒绝向我的客户提供一些专有的神奇php代码——但我认为它可以实现这一目的


Meh,YMMV。

是的,您可以使用
文件获取内容
文件放置内容
将其存储在服务器上,然后使用
包含内容
。虽然在我看来这是一件危险和冒险的事情,但这是可能的。您甚至可以从中提取某些代码,并只从文件中编写所需的代码。但当我使用上述方法时。我在变量中什么也得不到。表示变量为空。我不知道如何将它传递到main.php。我正在使用此方法来防止人们破解我的脚本。所以我的服务器上会有一部分脚本。这就是为什么我需要使用这种方法如果你允许包含,我需要知道为什么是有风险的,而不是好的做法。因为我需要建立一个系统,在那里我可以制作带有许可证到期日期的Php表单。我不想复制另一边的文件。因为正如我之前所说,我正在使用这种方法来防止人们破解我的脚本。所以我的服务器上会有一部分脚本。这就是为什么我需要使用这种方法。在互联网上使用脚本如何帮助保护您的脚本?我不确定我是否理解你的方法…我
$secondFile = file_get_contents('http://www.sample.com/includeThis.php');
file_put_contents('your_file', $secondFile, FILE_APPEND);