请记住,使用 URL 通过 curl/fopen 访问您的包含将意味着您正在访问这些 PHP 包含,就好像它们是常规 PHP 脚本一样。除非您将服务器配置为直接以纯文本形式提供 .php 文件,否则包含脚本将被执行,您得到的只是它们的输出。
例如
include.php
在您的集中式“包含”服务器上
<?php
function foo() {
echo 'hello from foo';
}
客户端站点上的一些脚本:
<?php
include('http://includes.example.com/inculde.php');
基本上将不包括任何内容。该include.php
脚本不产生任何输出。您将无法foo()
在客户端站点中获得可用的功能,因为远程站点没有返回 PHP 代码。
另一方面,如果你有这样的事情:
<?php
echo '<' . '?php';
?>
function foo() {
echo 'foo';
}
那么你会得到恰好是 PHP 代码的纯文本,并且包含会按预期工作。
但是,您不应该使用include()
远程文件。它为恶意用户打开了一整套攻击向量。也许您有 DNS 故障,并且攻击可以重新映射 的 IP include.example.com
,因此您的客户端站点现在正在从其控制的服务器加载代码,并且现在您的所有客户端都受到了危害。
也许存在网络故障,无论出于何种原因,您的中央包含服务器都无法从客户端机器上访问 - 现在他们的站点已经死在水中,因为您的服务器不可用。
基本上,您在系统中引入了单点故障,该故障将同时导致您的所有客户端失效。根本不是一个好的系统。