繁体   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