在URL中传递变量(php)& file_get_contents()函数

时间:2013-05-15 20:32:55

标签: php url file-get-contents

有没有办法在带有file_get_contents()的URL中传递变量,并让file_get_contents()检索基于传递的变量值的动态内容?

例如,假设我在网站A 的页面上有以下代码:

$contents=file_get_contents('http://example.com/get.php?a='.$number);
echo $contents;

在网站A上生成$number(值可以是1,2,3等)

然后在 example.com 上托管get.php。是否可以根据传递的变量值从get.php检索不同的内容?例如,如果a=1,则会提取get.php的某个部分,但是如果a=2get.php的不同部分将被提取,等等。这可能吗?< / p>

4 个答案:

答案 0 :(得分:1)

仅取决于get.php。如果它在a的不同值上返回不同的内容,那么肯定会有效。

答案 1 :(得分:1)

当然可以。

如果你找出变量的模式,就有可能。

如果您注意到该模式是一个数字,您可以尝试这样的事情:

您不希望在代码或输出中显示任何不相关的内容,并且您不希望即时进行过滤,因为它只会增加延迟。在目标计算机上的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;

请记住在网上打开您需要的网址时:

  1. 必要时授予allow_url_fopen访问权限
  2. 添加延迟,这样您就不会压倒目标服务器的资源
  3. 确认您没有违反某人的robots.txt档案
  4. 传递正确的标头,包括user_agent,以便您的服务器不会被禁止
  5. 如果您将脚本作为Apache下的网页运行,则会增加运行时限制。
  6. cURL更适合此并包含许多高级功能。

    更新 - 但这可能不是一个好主意

    以上示例仅适用于一页或两页,而不是用于查看网站上的内容以重新显示内容。我误解了,并认为你是一个网站的数据(一次性)。

    <强> LAN 在本地网络上,显示来自另一台服务器上的内容的局域网应该非常快,即使您正在挖掘内容,网站也应该相当快(按现代标准)。

    您需要将目标站点的域和ip添加到hosts文件中,这样每次调用该函数时系统都不会执行DNS查找(如果禁用了缓存)。

    同一个框 如果他们在同一台机器上,如果没有某种暂停,你可能会使系统超载。

    <强> WAN 如果您在两个服务器场中的两个独立网络之间相隔一段距离,则跳数将极大地影响脚本的性能。就任何时间长度运行实时生产服务器而言,这不是一个好主意。大多数人不会等待几秒钟来加载页面。

    此外,您还需要从挖掘服务器的统计信息中筛选挖掘服务器的IP,因为它看起来像目标计算机上的所有流量都来自一个位置。

    由于它们位于两个不同的盒子上,因此您需要确保IP表(防火墙)之类的内容不会锁定目标服务器上的所有访问权限,因为您可能会从同一IP中反复连接到站点。如果您无法控制两个网络,那么各种各样的事情也会阻止重复访问,例如防火墙和路由器。许多网络主机不喜欢重复的大量流量。如果您不小心错误配置任何一个盒子,也可能会因带宽而受到惩罚。

    数据库复制 如果要从数据库中提取内容,可能需要查看数据库复制并在每台计算机上保留数据库的两个副本。然后,您只需像加载任何其他文件一样加载内容。

答案 2 :(得分:0)

希望我能正确理解你。你的剧本:

http://wwww.domain1.com/get.php

其他一些资源:

http://www.resource.com/other.php

你的get.php,看起来像这样:

$findResource = $_GET['a'];
// You should perform some validation here on the $findResource value to prevent security issues
$contents=file_get_contents('http://www.resource.com/other.php?a='.$findResource);

答案 3 :(得分:0)

是的,这是可能的,但您必须关注隐私政策(许多网站都不允许抓取)。