当然。
如果您找出变量的模式,这是可能的。
如果你注意到模式是一个数字,你可以尝试这样的事情:
您不想在代码或输出中显示任何不相关的内容,也不想动态过滤,因为它只会增加延迟。在get.php
目标机器上:
if(!empty($_GET['a']) and is_numeric($_GET['a'])){
$id = $_GET['a'];
$sql = "select contents from database where id='$id'";
$results = mysqli_query($sql);
$row_cnt = mysqli_num_rows($result);
if ($row_cnt == 1){
while ($row = mysqli_fetch_array($results)){
echo $row['contents'];
}
} elseif (empty($row_cnt) {
echo "No results";
} else {
echo "Too many records.";
}
} else {
die;
}
在进行采矿的机器中(机器 2):
$contents = '';
for($x=0;$x<150;$x++){
$contents.=file_get_contents('http://example.com/get.php?a='.$number);
}
echo $contents;
请记住,在通过 Web 打开 URL 时,您需要:
- 如有必要,授予allow_url_fopen访问权限
- 添加延迟,这样您就不会压倒目标服务器的资源
- 验证您没有违反某人的robots.txt文件
- 传递正确的标头,包括 user_agent,这样您的服务器就不会被禁止
- 如果您在 Apache 下将脚本作为网页运行,请增加运行时间限制。
cURL更适合于此,并包含许多高级功能。
更新 - 但这可能不是一个好主意
上面的示例仅适用于一两个页面,而不是用于查看网站上的内容作为重新显示内容。我误解并认为您正在对网站进行数据挖掘(一次性)。
LAN
在本地网络 LAN 上显示来自另一台服务器的内容应该非常快,并且即使您正在挖掘内容,网站也应该运行得相当快(按照现代标准)。
您需要将目标站点的域和 ip 添加到 hosts 文件中,这样系统就不会在每次调用该函数时执行 DNS 查找(如果缓存被禁用)。
相同的盒子
如果它们在同一台机器上,如果没有适当的暂停,您可能会使系统过载。
WAN
如果您在两个相隔一定距离的服务器场中的两个独立网络上,则跃点数将极大地影响脚本的性能。就运行任何时间长度的实时生产服务器而言,这不是一个好主意。大多数人不会等待几秒钟来加载页面。
此外,您需要从正在挖掘的服务器的统计信息中过滤挖掘服务器的 ip,因为看起来目标计算机上的所有流量都来自一个位置。
由于它们位于两个不同的盒子上,因此您需要确保诸如 IP 表(防火墙)之类的东西不会锁定目标服务器上的所有访问权限,因为您可能会从同一个 IP 太快地重复连接到站点。如果您无法控制这两个网络,那么各种事物也会阻止重复访问,例如防火墙和路由器。许多网络主机不喜欢重复的大量流量。此外,如果您不小心错误地配置了任一框,您可能会因带宽受到处罚。
数据库复制
如果您从数据库中提取内容,您可能需要查看数据库复制并在每台机器上保留两个数据库副本。然后,您只需像加载任何其他文件一样加载内容。